Nginx80配置引发的问题

Nginx80配置引发的问题
项目场景80 端口 nginx 配置时遇到的 default_server 冲突和重启问题问题描述问题1加 80 server 块后 curl 返回 302curl -I http://ip:18006/可信域名验证文件.txt问题2service nginx restart 失败原因分析问题1的原因# nginx.conf 新增 server { listen 80; server_name 域名; location /验证文件.txt{ } } # /etc/nginx/sites-enable/default 同时存在 server { listen 80 default_server; server_name _; ... }忽略默认配置两个server块都监听80端口default_server 的server块优先级高。curl 被 sites-enable/default 的 listen 80 default_server 抢走请求但server块内未找到验证文件root /var/www/html 下没有请求的文件try_files $uri $uri/ 404 触发302重定向。问题2的原因sudo nginx 手动启动引起的冲突。直接由sudo nginx 命令启动的进程不受 systemd 管理。通过 service nginx restart 启动时由于手动启动的老进程依然存活占用端口新 nginx 尝试 bind() 端口时报错 address already in use 所以启动失败nginx: [emerg] bind() to 0.0.0.0:port failed (98: Address already in use)解决方案问题1的解决sudo mv /etc/nginx/sites-enable/default /etc/nginx/sites-enable/default.bak原因include 配置读取 sites-enable/ 目录时只认 .conf 后缀所以.bak不会被加载问题2的解决排查sudo netstat -tlnp | grep :80 # xxx/nginx: mast 占用80端口 sudo ps aux grep nginx | grep -v grep # -v反向匹配即排除 grep 命令自身统一使用 systemd 方式启动sudo killall nginx sleep 1 sudo service nginx start