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

移动端通过NGINX访问ERPNext频繁出现502 Bad Gateway错误求助

解决NGINX代理ERPNext移动端切换网络后502 Bad Gateway问题

问题核心

移动端在IPv4(WiFi)和IPv6(5G)网络间切换后,NGINX返回502错误,日志显示connect() failed (111: Connection refused) while connecting to upstream,本地直接访问ERPNext正常。

排查与修复步骤

1. 验证NGINX到ERPNext的基础连通性

首先确认NGINX服务器能正常访问ERPNext的上游地址:

  • 在NGINX服务器上执行:
    curl -v https://192.168.xxx.xxx/
    
    如果连接被拒绝,检查:
    • ERPNext服务器的防火墙(如ufw)是否允许NGINX服务器的IP访问443端口:
      # 在ERPNext服务器上添加允许规则
      ufw allow from 192.168.xxx.xxx to any port 443
      
    • ERPNext的Nginx配置是否绑定了所有IP(而非仅本地127.0.0.1),检查ERPNext站点的Nginx配置(通常在/etc/nginx/sites-available/{site_name}),确保listen指令为:
      listen 443 ssl;
      listen [::]:443 ssl;
      

2. 调整NGINX全局buffer配置

你的全局NGINX配置中设置了过小的buffer参数,会导致请求被截断或处理失败:
打开/etc/nginx/nginx.conf,注释或删除以下配置:

# client_body_buffer_size 1K;
# client_header_buffer_size 1k;
# client_max_body_size 1k;
# large_client_header_buffers 2 1k;

替换为合理的参数(按需调整):

client_body_buffer_size 16k;
client_header_buffer_size 4k;
client_max_body_size 100M;
large_client_header_buffers 4 8k;

3. 优化反向代理配置

更新ERPNext的站点NGINX配置,添加必要的头部和连接优化:

server {
    listen 443 ssl;
    listen [::]:443 ssl;
    ssl_certificate /etc/letsencrypt/live/erp.xx.xx/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/erp.xx.xx/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    server_tokens off;
    server_name erp.xx.xx;

    location / {
        proxy_pass      https://192.168.xxx.xxx/;

        # 传递必要的代理头部
        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;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Port $server_port;

        # 处理HTTP/1.1长连接,避免切换网络后连接失效
        proxy_http_version 1.1;
        proxy_set_header Connection "";

        # 增加超时设置,防止连接过早断开
        proxy_connect_timeout 60s;
        proxy_send_timeout 60s;
        proxy_read_timeout 60s;
    }

    client_max_body_size 100M;
}

4. 配置ERPNext信任代理

ERPNext基于Frappe框架,需要信任NGINX的IP以正确处理转发请求:

  • 编辑ERPNext站点的配置文件~/frappe-bench/sites/erp.xx.xx/site_config.json,添加:
    {
        ...
        "trusted_proxies": ["192.168.xxx.xxx"],
        "frappe_allow_remote_addr": true,
        "forwarded_for_header": "X-Forwarded-For"
    }
    
  • 重启ERPNext服务:
    bench restart
    

5. 配置上游连接池(可选)

为了优化NGINX到ERPNext的连接复用,可添加上游配置:
在nginx.conf的http块中添加:

upstream erpnext_upstream {
    server 192.168.xxx.xxx:443;
    keepalive 32; # 保持32个长连接
}

然后将站点配置中的proxy_pass改为:

proxy_pass https://erpnext_upstream/;

验证修复

修改配置后,重启NGINX:

systemctl restart nginx

然后在移动端切换网络测试,确认502错误是否消失。

内容的提问来源于stack exchange,提问作者user23514780

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 03:43:21