【教程】Nginx 反代HTTPS 遇到502、403 的问题 - 以反代cloudflare为例

建站交流2年前 (2023-02-16)6321

如下直接通过宝塔进行反代产生的配置文件:

location /
{
    proxy_pass https://www.example.com;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header REMOTE-HOST $remote_addr;
    proxy_redirect off;

    add_header X-Cache $upstream_cache_status;

    #Set Nginx Cache

        add_header Cache-Control no-cache;
    expires 12h;
}

访问后基本上就是502、403的状态码
但把上述的

proxy_pass https://www.example.com;

改为http://即可,原因自然是走了http的80端口,不是https的443端口
但如果开启了强制https跳转,此方法就没有效果了

如Cloudflare中,强制HTTPS选择仅支持单独为一个站点设置、或为账号下的全部站点设置,而页面规则免费账号也仅有3条,就算足够还得一条一个站点,着实麻烦。同时此方法也需要将SSL设置为关闭或灵活,若使用严格则也无效果。

通过一番搜索找到如下方法:
添加配置:

proxy_ssl_name www.example.com;    proxy_ssl_server_name on;    proxy_redirect off;

即可,www.example.com为目标站点,其实就是加了一层SNI头。

简单理解(可能有偏差):HTTP服务器要判断请求对应的网站是根据HOST头判断的,而HTTPS需要与通信双方校验SSL证书的可信度,服务端需要先返回对应的SSL证书,而服务端判断到底返回哪个网站的证书便是需要SNI头,之前我们没有设置相关的SNI信息,当然不会代理成功。

主要部分来了

      location / {
            //这里是设置 sni 来指明我们要访问的是哪个网站,如果反代域名不一样就写主站域名,把域名改成 $host 也是可以的
            proxy_ssl_name www.retao5.com;
            //这个很重要,如果你对 cloudflare 设置的反向代理出现了 502 的错误,大概就是没有设置这个参数
            proxy_ssl_server_name on;
            //首先设置了 Host,指明了我们要访问的是服务器上的哪个网站,因为我们反代使用的是相同的域名,所以直接用$http_host 即可,
            //如果你用了不同的域名,那就需要手动修改成你的源站域名了
            proxy_set_header Host $http_host;
            //这个用于告诉我们的服务器访客的真实 ip,而不是反代服务器的 ip,可以参考搜索下本站文章“Nginx 使用 CDN(CloudFlare)获取网站日志真实 IP 地址”
            proxy_set_header X-real-ip $remote_addr;
            //这里是 http 请求经过的服务器的 ip,包括请求者 ip,还有中间的代理服务器(如果提供)的 ip,如果想要查看真实的 ip,这个也得加上。 
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            //该指令用来修改被代理服务器返回的响应头中的 Location 头域和“refresh”头域,这里关闭重定向
            proxy_redirect off;
            //随便找个 cloudflare 的 ip 来反代即可,如果反代 OVH 原站,就写 OVH 的 IP
            proxy_pass https://1.1.1.1;
            //按 nginx 官方配置
            proxy_set_header Upgrade $http_upgrade;
            //按 nginx 官方配置
            proxy_set_header Connection "upgrade";
            //跨域配置
            proxy_set_header Remote_Addr $remote_addr;
            proxy_set_header X-Scheme $scheme;
            proxy_set_header X-Forwarded-Scheme $scheme;
            proxy_set_header X-Forwarded-Proto $scheme;
        }




标签: nginx反代

“【教程】Nginx 反代HTTPS 遇到502、403 的问题 - 以反代cloudflare为例” 的相关文章

评论列表

etsy
2年前 (2023-03-08)

赞一个,学习了

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。