You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nginx通过外部域名反向代理至同一机器时随机出现超时错误

Nginx通过外部域名反向代理至同一机器时随机出现超时错误

看起来你遇到的是同一服务器上多域名(一个走Cloudflare代理、一个直连)反向代理时的随机超时问题,先帮你梳理下当前的配置场景,再分析可能的原因和解决办法:

Disclaimer: 我已经在Cloudflare论坛问过这个问题,但深入排查后发现这更像是Nginx的问题。

当前域名DNS配置情况

example.com(已启用Cloudflare代理)

记录类型名称内容是否代理
Aexample.com12.34.56.78是
A*12.34.56.78是

app1.com(未启用Cloudflare代理)

记录类型名称内容
Aapp1.com12.34.56.78
Awww.app1.com12.34.56.78

可能的问题根源

  1. 本地DNS解析环路冲突:当Nginx反向代理app1.com时,如果配置里直接用域名app1.com,服务器会通过DNS解析到公网IP 12.34.56.78,然后请求自己的公网接口——这种本地环路请求很容易和Cloudflare过来的代理请求抢占服务器的网络连接资源,导致随机超时。
  2. Cloudflare与直连流量的路由干扰:Cloudflare的流量是从CF节点转发到你的服务器,而app1.com的流量是用户直接访问你的公网IP。如果服务器的防火墙、路由表没有做好流量区分,可能会出现连接在网络栈层面的混乱,引发随机的连接超时。
  3. Nginx连接池资源不足:如果Nginx的连接数上限、keepalive配置不够合理,当两个域名的请求同时涌入时,连接池耗尽就会导致部分请求超时。

针对性解决办法

1. 绕过公网DNS,直接本地访问app1

最直接的办法是修改Nginx反向代理配置,不用域名,直接指向服务器的回环地址或内网IP,彻底避免本地环路问题:

server {
    listen 80;
    server_name example.com;  # 假设是在example.com下反向代理app1

    location /app1/ {
        proxy_pass http://127.0.0.1:XXXX;  # 替换成app1实际监听的端口
        proxy_set_header Host app1.com;  # 保持app1的Host头,避免后端识别错误
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        # 开启keepalive优化连接复用
        proxy_http_version 1.1;
        proxy_set_header Connection "";
    }
}

如果业务必须用域名访问,可以在服务器的/etc/hosts里加一条强制解析:

127.0.0.1 app1.com www.app1.com

2. 隔离Cloudflare与直连流量的Nginx配置

给example.com的server块添加IP白名单,只接受Cloudflare节点的请求,避免无关流量干扰:

server {
    listen 80;
    server_name example.com *.example.com;

    # 只允许Cloudflare官方IP段访问,需要补充完整的CF IP列表
    allow 173.245.48.0/20;
    allow 103.21.244.0/22;
    allow 103.22.200.0/22;
    allow 103.31.4.0/22;
    allow 141.101.64.0/18;
    allow 108.162.192.0/18;
    allow 190.93.240.0/20;
    allow 188.114.96.0/20;
    allow 197.234.240.0/22;
    allow 198.41.128.0/17;
    allow 162.158.0.0/15;
    allow 104.16.0.0/13;
    allow 104.24.0.0/14;
    allow 172.64.0.0/13;
    allow 131.0.72.0/22;
    deny all;

    # 其余业务配置...
}

3. 优化Nginx连接资源配置

调整Nginx全局配置,提升连接处理能力,避免因资源耗尽导致超时:

# nginx.conf 全局段
worker_processes auto;  # 自动匹配CPU核心数
worker_connections 10240;  # 增大单worker的连接上限
multi_accept on;  # 允许worker进程一次性接受所有新连接

http {
    keepalive_timeout 65;
    keepalive_requests 1000;  # 单个keepalive连接可处理的请求数
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;

    # 反向代理的通用优化
    proxy_connect_timeout 30s;
    proxy_send_timeout 30s;
    proxy_read_timeout 30s;
    proxy_http_version 1.1;
    proxy_set_header Connection "";
}

4. 排查服务器网络层面问题

  • 用iptables -L或防火墙管理工具检查规则,确保没有随机拦截连接的情况;
  • 用tcpdump host app1.com and port 80抓包,观察超时发生时的连接状态,看是否有丢包、RST包等异常;
  • 检查服务器的路由表(route -n),确认没有针对12.34.56.78的冲突路由规则。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.17 09:30:30