Nginx 双网卡反向代理 + Tomcat 内网集群 配置笔记
环境说明
- Nginx 服务器:双网卡
- 外网网卡:
192.168.75.3(nat模式,供外部访问) - 内网网卡:
192.168.160.3(仅主机模式,与 Tomcat 通信)
- 外网网卡:
- Tomcat 服务器:单网卡(内网)
- Tomcat-1:
192.168.160.4 - Tomcat-2:
192.168.160.5
- Tomcat-1:
- 操作系统:CentOS 7 / RHEL 7 系列
一、Nginx 服务器配置
1.1 双网卡网络配置
① 外网网卡配置(示例 ens33)
vi/etc/sysconfig/network-scripts/ifcfg-ens33TYPE=Ethernet BOOTPROTO=static NAME=ens33 DEVICE=ens33 ONBOOT=yes IPADDR=192.168.75.3 NETMASK=255.255.255.0 GATEWAY=192.168.75.2 # 外网网关,必须配置 DNS1=8.8.8.8② 内网网卡配置(示例 ens34)
vi/etc/sysconfig/network-scripts/ifcfg-ens36TYPE=Ethernet BOOTPROTO=static NAME=ens34 DEVICE=ens34 ONBOOT=yes IPADDR=192.168.160.3 NETMASK=255.255.255.0 # 注意:内网网卡绝对不能写 GATEWAY ! name=ens36 # 注意 device=ens36 # 注意 defroute=no # 注意1.2 系统环境准备(关键步骤)
# 关闭防火墙systemctl stop firewalld systemctl disable firewalld# 关闭 SELinux(或配置布尔值放行网络连接)setenforce0sed-i's/SELINUX=enforcing/SELINUX=disabled/g'/etc/selinux/config# 如果不想完全关闭 SELinux,可仅开启 Nginx 网络权限(推荐生产环境):setsebool-Phttpd_can_network_connect1# 关闭 NetworkManager 服务(避免与 network 服务冲突)systemctl stop NetworkManager systemctl disable NetworkManager# 重启网络服务使配置生效systemctl restart network1.3 验证网络连通性
# 检查 IP 是否生效ipaddr show ens33ipaddr show ens36# 测试与两台 Tomcat 的连通性ping192.168.160.4ping2192.168.160.5二、Tomcat 服务器配置(两台操作相同)
2.1 内网 IP 配置
vi/etc/sysconfig/network-scripts/ifcfg-ens33# 根据实际网卡名修改TYPE=Ethernet BOOTPROTO=static NAME=ens33 DEVICE=ens33 ONBOOT=yes IPADDR=192.168.160.4 # 另一台改为 192.168.160.5 NETMASK=255.255.255.0 # 内网机器不需要配置网关,除非有访问外网需求2.2 系统环境准备
# 关闭防火墙systemctl stop firewalld systemctl disable firewalld# 关闭 SELinuxsetenforce0sed-i's/SELINUX=enforcing/SELINUX=disabled/g'/etc/selinux/config# 重启网络systemctl restart network2.3 启动 Tomcat
# 进入 Tomcat 安装目录的 bin 目录cd/opt/tomcat/bin# 根据实际路径调整./startup.sh# 确认 Tomcat 监听在正确的地址(应为 0.0.0.0 或具体内网 IP)netstat-tlnp|grep8080三、Nginx 反向代理配置
3.1 编辑 Nginx 配置文件
vi/etc/nginx/conf.d/tomcat_proxy.conf# 新建独立配置文件写入以下内容:
server { listen 80; server_name 192.168.75.3; # 外网访问的 IP 或域名 # 代理路径 /test4/ → Tomcat-4 location /test4/ { proxy_pass http://192.168.160.4:8080/; } # 代理路径 /test5/ → Tomcat-5 location /test5/ { proxy_pass http://192.168.160.5:8080/; } }3.2 验证并重载 Nginx
nginx-t# 检查语法systemctl reload nginx# 重载配置3.3 测试反向代理
# 在 Nginx 服务器本机测试curl-Ihttp://127.0.0.1/test4/# 从外网浏览器访问http://192.168.75.3/test4/ http://192.168.75.3/test5/四、故障排查备忘录
| 故障现象 | 可能原因 | 检查命令 |
|---|---|---|
| 502 Bad Gateway | SELinux 阻止 Nginx 联网 | getsebool httpd_can_network_connect |
| 502 Bad Gateway | 防火墙阻挡 8080 端口 | systemctl status firewalld |
| 404 Not Found | proxy_pass路径拼接错误 | 检查末尾斜杠是否与 Tomcat 应用路径匹配 |
| No route to host | 内网 IP 不在同一网段 | ping 192.168.160.4 |
| Connection refused | Tomcat 未启动或监听在 127.0.0.1 | netstat -tlnp | grep 8080 |
| 网卡启动失败 | 多个网关配置冲突 | 确保内网网卡配置文件中无GATEWAY |
| 网卡名称不匹配 | 配置文件DEVICE=与实际网卡名不符 | ip link show查看真实网卡名 |
五、关键注意事项
内网网卡绝对不能配置
GATEWAY,否则会导致路由冲突,网络服务启动失败。优先关闭 NetworkManager,避免与
network服务争抢网卡控制权。SELinux 若不想关闭,务必执行:
setsebool -P httpd_can_network_connect 1。修改配置文件后务必执行
nginx -t和systemctl reload nginx,确保配置生效。虚拟机网络模式必须统一:Nginx 内网网卡与 Tomcat 网卡应处于同一虚拟网络(如均为“仅主机模式”)。
