Nginx转发:http请求被浏览器强制转为https的解决方案
用Gin搭了个web服务。软件下载二级站点:我的软件,配置了ssl证书,从而实现HTTPS的加密协议。 但当我访问网址的时候,有些静态资源图片加载不出来。因为一些静态文件我用七牛云的cdn免费存储。因为我的域名apps.reminisce.top开启了ssl,七牛云cdn是http。浏览器现在不允许https的站点混合http请求,导致Http请求浏览器会强制变成Https。而七牛云cdn源站就是http,因此报错。 那么怎么解决呢?有以下四种:
- 把我的apps域名降级成http,也就是不配置ssl
- 七牛云cdn源站配置https
- 利用nginx做中转
- 把这些静态资源转存到自己的域名服务器,链接改为自己的服务器资源地址
server { listen 443 ssl; server_name apps.reminisce.top; ssl_certificate xxxx.crt; ssl_certificate_key xxxx.key; # ....一些配置 root xxxxx; # 将以 "/cdnqiniu" 开头的任何静态资源地址转发到http://xxx.xxx.com, # 并保留原始的 URI 路径,但不要包括"/cdnqiniu"部分 # --因为开启了ssl,七牛云cdn是http,Http请求浏览器会强制变成Https location ^~ /cdnqiniu { # backendIP可让浏览器响应标头显示真实请求ip # add_header backendIP $upstream_addr; rewrite ^/cdnqiniu(.*) $1 break; proxy_pass http://xxx.xxx.com; } # 正常转发 gin location / { proxy_pass http://xxx:999999999999999999; proxy_http_version 1.1; # ....一些配置 } }从配置上就可以看出内容了。首先443端口监听域名,当然我的80端口也监听了重定向到443而已,只不过没写出来。然后location ^~ /cdnqiniu表示开始精确正则匹配,匹配以/cdnqiniu为开头的uri。我把那些需要cdn的静态资源地址开头都定义成/cdnqiniu,这样在nginx这边就能统一匹配到这些静态资源的请求,然后进行转发。然后rewrite块,将^/cdnqiniu(.*)进行正则匹配,并且(.*)是匹配到的第一组,这个第一组也就是$1的值,也就是说,/cdnqiniu/img/1.jpg这样的资源,$1将会获取到/img/1.jpg,并且去除了开头的/cdnqiniu。然后proxy_pass头将转给七牛云cdn源站http://xxx.xxx.com处理,并且最终的静态资源转发地址将变成诸如:http://xxx.xxx.com/img/1.jpg,从而实现了转发,节省了带宽。最后location /匹配任何除了/cdnqiniu开头的url,这个就不用说了。
来自:计算机系统与软件工具
更新于2023-08-31 22:35:21 发表于2023-08-31 22:30:45
更新于2023-08-31 22:35:21 发表于2023-08-31 22:30:45
发表您的评论