说明:记录一次使用Nginx转发请求的错误;
场景
公司内部有两台服务器都跑了后端项目,在使用Nginx做请求分发时,我发现其中有台服务器一直没有处理请求(没打印相关的日志信息),于是我修改了下Nginx的配置,让请求只转发到这台服务器上,发现前端项目报错,无法处理请求。
排查
首先排查了是不是程序报错了,使用java -jar
手动启动了项目,发现没得问题,控制台没有打印错误信息。于是,我去查看Nginx的日志信息,发现以下日志信息;
[error] 15740#0: *731 connect() failed (113: No route to host) while connecting to upstream,
解决
这台跑后端项目的服务器,防火墙没有开放端口,即server.port
。Nginx将请求转发过来时,被防火墙拦截住了。可敲下面的命令查看、开放端口,设置完后刷新防火墙配置生效。
# 查看防火墙允许的端口
sudo firewall-cmd --list-ports# 设置防火墙允许访问的端口,如3306
sudo firewall-cmd --zone=public --add-port=3306/tcp --permanent# 刷新防火墙配置
sudo firewall-cmd --reload
需要移除防火墙开放端口,敲下面的命令,同样,设置完需刷新防火墙配置才能生效;
# 移除防火墙开放的某端口,如22
sudo firewall-cmd --zone=public --remove-port=22/tcp --permanent
当然,也可以直接关闭防火墙,相关命令如下:
# 查看防火墙状态
systemctl status firewalld# 开启防火墙
systemctl start firewalld# 关闭防火墙
systemctl stop firewalld