Nginx反代Cloudflare源站的两种写法

V+变量
2024-12-24 / 0 评论 / 6 阅读 / 正在检测是否收录...
最近在折腾nginx反代的问题,由于网站服务器在国外,给套了一层cf,直接用反代源站的办法基本都是失败,没办法只能网上查找资料,加上自力更生,找到两种反代cf的写法。

dns设置

本文我们针对全面反代cloudflare来说,直接反代源站也是类似的操作,我们当前采取的是ns接入cloudflare的方式,即域名服务器已经修改成了cloudflare的服务器,在cloudflare上设置dns记录,添加两条记录。

cf.example.com 解析到你的源站ip,并开启cdn(如果你是直接反代源站,那么这一步关闭cdn,仅作为dns使用即可)
blog.example.com 解析到你的反代服务器ip,仅作为dns使用。

1 利用proxy_ssl_name声明源站,告诉CF

        #PROXY-START/
        location /
        {
        proxy_pass https://www.xboy.uk;
        proxy_set_header Host www.xboy.uk;
        #向后端传递访客 ip
        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;
       #向后端传递访客 ip (反代CF增加规则)
   
       proxy_ssl_name www.xboy.uk;
       proxy_ssl_server_name on;
       
 
       #缓存设置
       add_header X-Cache $upstream_cache_status;
        #Set Nginx Cache
        
        proxy_ignore_headers Set-Cookie Cache-Control expires;
        proxy_cache_key $host$uri$is_args$args;
        proxy_cache_valid 200 304 301 302 120m;
        expires 12h;
        }
        #PROXY-END/

2 反代到cloudflare IP

# 如果反代的是cloudflare
        location / {
        # 由于我们反代的cloudflare使用的是 https,所以我们需要指明sni,不然是无法握手的,另外还需要设置host,这两个都要设置成接入cloudflare的域名。
        proxy_ssl_name cdn.example.com;
        proxy_ssl_server_name on;
        proxy_set_header Host cdn.example.com;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_redirect off;
        # 重点!由于我们接入cloudflare的域名和我们反代服务器的域名不一样,typecho的数据库里面记录的链接都是cdn.example.com的形式,所以我们要做内容替换。我们还需要通过设置Accept-Encoding "";来告诉服务器不要对内容进行压缩,不然返回的数据没办法使用sub_filter替换。 
        proxy_set_header Accept-Encoding "";
        sub_filter "https://cdn.example.com" "https://blog.example.com";
        # 开启内容多次替换
        sub_filter_once off;
        # 禁用缓存 (这个应该会影响到cloudfalre的缓存,不建议设置)
        add_header Cache-Control no-cache;
        expires 12h;
        # 这里随便找个cloudflare的ip即可
        proxy_pass https://1.0.0.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        }
0

评论 (0)

取消