You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

能否在网站访客与Cloudflare CDN之间部署Nginx反向代理并实现多端口差异化处理?

能否在网站访客与Cloudflare CDN之间部署Nginx反向代理并实现多端口差异化处理?

当然可以实现!你的需求完全合理,而且用Nginx配置起来其实挺直接的,我给你一步步拆解怎么做:

核心思路

简单来说,就是给你的VPS上的Nginx单独配置80、443端口的反向代理规则,把这两个端口的请求直接转发到Cloudflare的边缘节点;其他端口不用额外配置,让VPS上的邮件、监控等服务直接监听处理就行,Nginx不会插手这些端口的流量。

具体配置步骤

1. 准备Nginx配置文件

先在你的VPS上创建一个清晰的配置文件,比如/etc/nginx/conf.d/proxy-to-cloudflare.conf(比用IP命名好记多了),然后分端口写规则:

80端口(HTTP请求)配置

直接用Nginx的HTTP反向代理模块,配置如下:

server {
    listen 80;
    # 这里可以填你的VPS公网IP,或者如果域名已经解析到VPS,也可以写域名
    server_name your-vps-public-ip your-domain.com;

    location / {
        # 替换成Cloudflare分配给你域名的边缘节点IP(也可以直接写你的域名,因为Cloudflare已经接管了解析,用IP会更高效)
        proxy_pass http://cloudflare-edge-ip;
        
        # 这几行非常重要!不然Cloudflare和你的源站拿到的访客IP会是VPS的IP,影响日志和安全策略
        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 X-Forwarded-Proto $scheme;
    }
}
443端口(HTTPS请求)配置

这里有两种可选方案,选哪种看你的需求:

  • 方案一:TCP流量透传(推荐)
    用Nginx的Stream模块直接透传443端口的TCP流量到Cloudflare,不需要在VPS上配置SSL证书,非常省事。
    首先要确保你的Nginx安装了Stream模块(大部分发行版默认安装),然后在/etc/nginx/nginx.confhttp块外面添加Stream配置:
    stream {
        server {
            listen 443;
            proxy_pass cloudflare-edge-ip:443;
        }
    }
    
  • 方案二:HTTP模块反向代理
    如果需要在VPS上对HTTPS请求做一些额外处理(比如修改请求头、缓存等),可以用这个方案,但需要给VPS上的域名配置SSL证书(比如用Let's Encrypt的certbot生成免费证书)。配置如下:
    server {
        listen 443 ssl;
        server_name your-vps-public-ip your-domain.com;
        
        # 替换成你的证书路径
        ssl_certificate /path/to/your/cert.pem;
        ssl_certificate_key /path/to/your/key.pem;
    
        location / {
            proxy_pass https://cloudflare-edge-ip;
            # 同样要配置这些头信息
            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 X-Forwarded-Proto $scheme;
        }
    }
    

2. 其他端口的处理

完全不需要额外配置!只要你在VPS上部署的邮件、监控等服务监听了对应的端口(比如25、143、8080等),并且VPS的防火墙开放了这些端口,访客的请求就会直接被这些服务接收处理,Nginx不会拦截这些端口的流量,完美实现差异化处理。

关键注意事项

  • 记得把你的域名解析地址改成VPS的公网IP,这样访客才会先访问到你的VPS Nginx
  • 无论用哪种443端口的配置方式,都要确保Cloudflare的边缘IP是正确的(可以通过nslookup your-domain.com查询,Cloudflare会返回它的边缘节点IP)
  • 配置完后一定要测试Nginx配置的正确性:sudo nginx -t,如果显示test is successful,再重载配置:sudo systemctl reload nginx
  • 检查VPS的防火墙(比如ufw、firewalld),确保开放了80、443以及你需要使用的其他端口

这样配置完成后,就完全符合你的需求了:访客的80/443请求会经过VPS Nginx转发到Cloudflare,再到你的源站;其他端口的请求直接由VPS上的对应服务处理~

备注:内容来源于stack exchange,提问作者Aleksandar Pushevich

火山引擎 最新活动