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
此内容暂不允许评论