识别重庆云主机上的配置冲突,核心是找到同一项设置被两个以上地方定义、且值不一致的情况。比如安全组放行了 8080 端口,但系统内防火墙又把它拦掉;或者云硬盘挂载点写错,导致应用读到的其实是旧数据盘。判断方法不是猜,而是按“入口—系统—应用”三层逐项对照,看同一目标是否出现两个矛盾的定义。
假设你在重庆地域买了一台 4 核 8G 的云主机,用来跑一个内部管理系统。部署完成后,浏览器打不开页面,但 SSH 能正常登录。你依次检查了这些地方:
listen 80; 写在一个被注释掉的 server 块里;root /var/www/old;。这里的冲突有三处:安全组放行 80,但 Nginx 实际没监听 80;Nginx 监听 8080,但安全组没放行 8080;站点根目录指向 old,而新代码放在 new。三个问题叠在一起,只改任何一处都不会让页面恢复。这个例子说明,配置冲突往往不是单个错误,而是多个层级对“服务应该怎么跑”给出了不同答案。
把云主机上的配置分成三层,每层只回答一个问题,冲突就容易暴露:
三层都指向同一个端口、同一个目录、同一个后端地址时,配置才算自洽。只要某一层的值与另外两层不同,就存在冲突。
很多冲突之所以难发现,是因为配置文件写的是一个值,运行时生效的是另一个值。以下命令用于对照检查,适用于 Linux 系统:
ss -tlnp:查看实际监听的端口和对应进程,判断应用是否真的在监听你以为的端口。firewall-cmd --list-all 或 iptables -L -n:查看系统防火墙实际放行规则。getenforce:查看 SELinux 是否处于 enforcing,它可能阻止 Nginx 读取非标准目录。nginx -T:输出 Nginx 最终合并后的完整配置,能看出哪个 server 块真正生效。判断结果的方法很直接:如果 ss -tlnp 显示 8080 在监听,而安全组只放行 80,那外部访问必然失败,冲突在入口层与应用层之间。如果端口都对,但页面返回 403,再去看目录权限和 SELinux,而不是继续改安全组。
排查配置冲突时,最容易犯的错误是改完配置文件就认为问题解决。实际上有几种情况会让修改不生效:
nginx -s reload,旧进程仍在用旧配置;因此每次修改后,都要回到三层对照法重新确认一遍实际值,而不是只确认配置文件里的文字。
如果这台云主机还要继续加服务,建议维护一份简短清单,每加一项就填一行:服务名称、期望端口、安全组是否放行、系统防火墙是否放行、应用实际监听端口、数据目录、依赖的后端地址。填完后逐列比对,任何一列出现两个不同值,就是需要处理的冲突点。这份清单不依赖具体云厂商的控制台界面,换平台也能用。
下一步,选一台当前正在运行但配置较乱的云主机,用 ss -tlnp 和 nginx -T 输出实际生效值,再与安全组规则逐条对照,把不一致的项记下来,按入口层、系统层、应用层的顺序逐项修正。