移动端通过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;
- ERPNext服务器的防火墙(如
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
相关产品推荐
相关产品推荐

