Nginx反向代理SpringBoot动态内容报504超时问题求助
解决Nginx反向代理SpringBoot动态接口504超时问题
针对静态资源访问正常、动态接口报upstream timed out (110: Unknown error) 504超时的问题,从配置修正和故障排查角度给出以下解决方案:
1. 优先修正配置错误
(1)补全后端服务端口
你的upstream块仅配置了后端IP,未指定端口。Nginx默认会尝试连接后端80端口,但SpringBoot应用通常默认运行在8080端口,这会导致Nginx无法连通后端服务,直接触发超时。
修改upstream配置,添加SpringBoot的实际运行端口(示例为8080,根据你的实际情况调整):
upstream backend_server{ server 172.22.56.180:8080 weight=1; server 172.22.56.181:8080 weight=1; }
(2)替换无用的uwsgi配置
location /块中的uwsgi_send_timeout、uwsgi_connect_timeout等参数是给uWSGI服务器(通常搭配Python应用)使用的,和SpringBoot的HTTP服务完全不兼容,直接删除这些配置,替换为HTTP代理对应的proxy_*超时参数:
location / { proxy_pass http://backend_server; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 配置HTTP代理超时 proxy_send_timeout 3600s; proxy_read_timeout 3600s; proxy_connect_timeout 60s; }
(3)清理无关的fastcgi配置
server块中的fastcgi_*系列配置是给PHP-FPM等FastCGI服务用的,SpringBoot场景下完全无用,删除这些配置可简化配置结构,避免潜在干扰。
2. 网络与后端服务排查
- 验证后端连通性:在Nginx服务器上执行
curl http://172.22.56.180:8080/你的动态接口路径,或telnet 172.22.56.180 8080,确认Nginx能正常访问后端SpringBoot服务。如果不通,检查后端服务器的防火墙/安全组是否开放对应端口,或网络路由是否正常。 - 查看后端日志:检查两台SpringBoot服务器的应用日志,确认请求是否到达后端。如果请求到达但后端处理超时,需要优化接口性能,或根据实际处理时长调整Nginx的
proxy_read_timeout值。 - 修正Host头:原配置中
proxy_set_header Host $http_host:$proxy_port会将Nginx的端口传递给后端,可能导致后端服务处理异常,改为proxy_set_header Host $host即可。
修正后的完整配置示例
worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; proxy_send_timeout 3600s; proxy_read_timeout 3600s; proxy_connect_timeout 60s; sendfile on; keepalive_timeout 65; #gzip on; upstream backend_server{ server 172.22.56.180:8080 weight=1; server 172.22.56.181:8080 weight=1; } server { large_client_header_buffers 4 16k; client_max_body_size 300m; client_body_buffer_size 128k; proxy_pass_header Set-Cookie; proxy_redirect off; proxy_hide_header Vary; proxy_set_header Accept-Encoding ''; proxy_ignore_headers Cache-Control Expires; proxy_set_header Referer $http_referer; proxy_set_header Host $host; proxy_set_header Cookie $http_cookie; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; listen 80; server_name localhost; location /resources/ { alias /usr/local/openresty/nginx/html/resources/; index index.html index.htm; } location / { proxy_pass http://backend_server; 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_send_timeout 3600s; proxy_read_timeout 3600s; proxy_connect_timeout 60s; } error_page 500 502 503 504 /resources/50x.html; location = /50x.html { root html; } } }
修改配置后,执行nginx -s reload使配置生效,再测试动态接口访问。
内容的提问来源于stack exchange,提问作者GingerJ
相关产品推荐
相关产品推荐

