如何阻止Nginx监听80端口?附相关配置与监听状态
Nginx 监听80端口的原因及解决方法
问题背景
我用Nginx将8545端口路由到8845端口,配置文件default.conf如下:
server { listen 8545; listen [::]:8545; server_name 194.***.***.***; location / { auth_basic "protected gateway area"; auth_basic_user_file /etc/apache2/.htpasswd; proxy_pass http://127.0.0.1:8845; proxy_read_timeout 600s; } }
但Nginx仍在监听80端口(netstat输出显示同一Nginx主进程同时监听8545和80端口),需要将80端口用于其他用途,想知道原因和解决办法。
netstat -ltupn截取输出:
Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name ... tcp 0 0 0.0.0.0:8545 0.0.0.0:* LISTEN 195197/nginx: maste ... tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 195197/nginx: maste ... tcp6 0 0 :::8545 :::* LISTEN 195197/nginx: maste tcp6 0 0 :::80 :::* LISTEN 195197/nginx: maste ...
原因分析
Nginx会加载主配置文件中指定的所有配置片段,你的default.conf只配置了监听8545端口,但系统中大概率存在另一个包含listen 80;指令的server配置(比如默认安装时自带的默认站点配置),被Nginx一同加载,导致进程监听80端口。
常见触发场景:
- Nginx主配置文件(通常是
/etc/nginx/nginx.conf)通过include指令引入了其他目录(比如/etc/nginx/sites-enabled/或/etc/nginx/conf.d/)下的配置文件 - 这些目录里存在默认的server配置,其中包含
listen 80;和listen [::]:80;指令
解决步骤
检查主配置的引入规则
打开Nginx主配置文件:sudo nano /etc/nginx/nginx.conf查找类似如下的
include行:include /etc/nginx/sites-enabled/*; include /etc/nginx/conf.d/*.conf;这些就是Nginx额外加载的配置文件路径。
定位并修改监听80端口的配置
进入上述include指定的目录,逐个检查里面的配置文件,找到包含listen 80;或listen [::]:80;的server块:- 直接删除这个多余的server块
- 或者注释掉所有
listen 80;相关的指令(在行前加#) - 也可以将其监听端口修改为其他未被占用的端口
验证配置合法性
修改完成后,执行以下命令检查配置是否正确:sudo nginx -t输出显示
test is successful则说明配置有效。重新加载Nginx生效
执行命令重新加载配置,使修改生效:sudo systemctl reload nginx # 或者使用 sudo nginx -s reload验证监听状态
再次执行netstat命令确认80端口已不再被Nginx监听:sudo netstat -ltupn | grep nginx
内容的提问来源于stack exchange,提问作者M. Akar
相关产品推荐
相关产品推荐

