logo NodeSeekbeta

实现国内访客走反代,国外访客走 Cloudflare 的一种方案

前因是看到这个帖子,想起之前也研究过,后来又是证书问题又是重定向过多又是502等问题,就放弃了
https://www.nodeseek.com/post-182697-2

经大佬提醒解决了证书问题后,大致知道该怎么部署了,正好水个贴(
测试整理的方案如下,仅供参考,有更好的方案欢迎分享
xhj010

示例:
一个域名:example.com,解析在 cloudflare
使用华为云进行分地区解析(推荐注册新加坡或其他地区海外账户不用实名,腾讯云也行
源站机一台
反代机一台(其实反代机换成 自建/大陆优化 CDN 也一样,只需要把下面 A 解析反代机 ip 换成 CNAME CDN 域名就好

想要尽可能安全的话推荐设置白名单 ip,我反正懒得设(
推荐在源站设置仅反代机 ip、cloudflare ip 还有其他个人常用ip访问
在反代机设置仅源站 ip、大陆 ip 还有其他个人常用 ip 的访问

事先准备

  1. cloudflare 上:
    vps1.example.com ==A=> 源站ip 开启小黄云
    cdn.example.com ==NS=> 华为云

  2. 华为云上:
    默认/海外:cdn.example.com ==CNAME=> vps1.example.com
    大陆:cdn.example.com ==A=> 反代机ip

假设搭建网站 test.example.com

  1. cloudflare 上
    test.example.com ==CNAME=> cdn.example.com 不开小黄云

  2. 源站正常部署网站到test.example.com,开启 https,使用 DNS 申请证书

  3. 反代机同样绑定test.example.com,开启 https,使用 DNS 申请证书
    反代配置如下
    其中重点是 proxy_ssl_server_name on;proxy_ssl_name test.example.com;,开启 SNI

    location / {
    	proxy_pass https://源站ip:443; 
    	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_set_header Upgrade $http_upgrade; 
    	proxy_set_header Connection $http_connection; 
    	proxy_set_header X-Forwarded-Proto $scheme; 
    	proxy_http_version 1.1; 
    	add_header X-Cache $upstream_cache_status; 
    	add_header Cache-Control no-cache; 
    	proxy_ssl_server_name on; 
    	proxy_ssl_name test.example.com; 
    }
    

结语

后续其他网站都像 test.example.com 那样部署就好了
反代配置只需要换一下 proxy_ssl_name 就行
DNS 申请证书可以直接申请泛域名,这样就只需要申请一次(怕泄露源站 ip 就还是一个一个申请,应该不会泄露吧(

参考资料

  1. @KqnxZqvs #15
  2. https://blog.dianduidian.com/post/nginx反向代理当后端为https时的一些细节和原理/
  3. google.com(一些以前的没记录
123
123

你好啊,陌生人!

我的朋友,看起来你是新来的,如果想参与到讨论中,点击下面的按钮!

📈用户数目📈

目前论坛共有59945位seeker

🎉欢迎新用户🎉