nginx 无法访问tomcat
nginx反向代理tomcat失败?排查这8个关键点就够了
当你在服务器上配置nginx反向代理Tomcat后,却发现访问nginx地址时始终显示404、502或连接超时,这往往是反向代理链路中的某个环节出了问题。本文结合一线运维经验,总结8个最常见的排查方向,帮你快速定位问题。
一、基础服务状态:先确认Tomcat是否真的在运行
最容易忽略的问题是Tomcat服务本身未启动。可通过以下命令检查:
# 检查Tomcat进程
ps -ef | grep tomcat
# 查看Tomcat日志(默认路径:tomcat安装目录/logs/catalina.out)
tail -n 100 /data/tomcat/logs/catalina.out
若进程不存在或日志中出现ERROR,需先启动Tomcat并解决服务启动失败的问题(如端口冲突、内存不足等)。
二、端口与网络:确认通信链路是否通畅
1. 本地端口连通性测试
在Nginx服务器上,用telnet或nc测试是否能连接到Tomcat端口:
# 示例:测试Tomcat 8080端口是否开放
telnet 127.0.0.1 8080
# 或使用nc(netcat)
nc -zv 127.0.0.1 8080
- 若提示
Connection refused:说明Tomcat未启动或端口被占用(如8080被其他服务占用)。 - 若提示
Connection timed out:可能是Tomcat端口未监听(如server.xml配置错误)或防火墙拦截。
2. 防火墙与端口映射
- Linux防火墙:检查
firewalld或iptables是否开放Tomcat端口:# firewalld示例 firewall-cmd --list-ports # 查看已开放端口 firewall-cmd --add-port=8080/tcp --permanent # 临时开放 - 容器环境:若Tomcat在Docker中运行,需确认容器端口是否正确映射到宿主机(如
docker ps查看-p参数)。
三、Nginx反向代理配置:检查路径与协议
1. 核心配置错误
Nginx反向代理的关键配置是proxy_pass,常见错误包括:
- 端口/IP错误:如
proxy_pass http://127.0.0.1:8080写成http://127.0.0.1:8081。 - 协议缺失:少写
http://或https://(如proxy_pass //127.0.0.1:8080)。 - 路径不匹配:若Tomcat部署的是
/myapp应用,location应配置为/myapp而非/,且proxy_pass需带路径:location /myapp { proxy_pass http://127.0.0.1:8080/myapp; # 需与应用路径一致 proxy_set_header Host $host; }
2. 配置语法校验
修改Nginx配置后,务必先执行语法检查:
nginx -t # 检测配置文件语法是否错误
若提示nginx: configuration file /etc/nginx/nginx.conf test is successful,则配置语法正确。
四、Tomcat Connector配置:允许外部访问
Tomcat默认仅监听localhost(即127.0.0.1),导致外部访问失败。需检查server.xml中的Connector配置:
<Connector port="8080"
address="0.0.0.0" <!-- 允许所有IP访问,而非仅localhost -->
protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
若仅需允许内网访问,可设置address="192.168.1.100"(服务器内网IP),避免暴露公网。
五、直接访问测试:区分是Tomcat还是Nginx问题
若直接访问Tomcat地址(如http://tomcat-ip:8080)能正常打开应用,但通过Nginx代理访问失败,则问题必在Nginx配置。
若直接访问也失败,说明Tomcat本身未正确部署或应用有问题(如webapps目录下无对应应用,或应用未解压)。
六、日志分析:定位具体错误
- Nginx日志:查看
/var/log/nginx/error.log,重点关注502 Bad Gateway或upstream connect error,通常指向Tomcat未响应。 - Tomcat日志:查看
catalina.out,若出现HTTP Status 404,说明Nginx代理路径与Tomcat应用路径不匹配;若出现Java.lang.OutOfMemoryError,需调整JVM内存参数。
七、常见误区:这些细节最容易踩坑
- 路径冗余:
proxy_pass后多写/导致路径错误(如proxy_pass http://127.0.0.1:8080/会将请求代理到http://127.0.0.1:8080/的根路径,若应用是/myapp,则需去掉末尾的/)。 - 端口冲突:Tomcat默认端口8080被占用(如80端口被Apache占用),需修改
server.xml的port为8081等未占用端口。 - 容器网络隔离:若Nginx和Tomcat在Docker中,需通过
--net=host或容器互联模式(--link)确保通信。
八、总结排查流程
- 先查Tomcat状态(启动、端口监听)→
- 测试本地端口连通性(
telnet/curl)→ - 检查Nginx配置(语法、
proxy_pass路径)→ - 验证Tomcat应用部署(直接访问测试)→
- 分析日志定位具体错误。

通过以上步骤,90%的Nginx反向代理Tomcat失败问题均可快速解决。若仍有疑问,可结合实际报错信息(如502对应连接超时、404对应路径错误)针对性排查。








