nginx服务器默认监听80端口(HTTP)和443端口(HTTPS),这是绝大多数nginx实例的默认答案。如果你在浏览器地址栏输入域名或IP时没带端口号,nginx就是在80端口上默默等着你,下面从默认配置、修改方法、排错思路到安全加固,把nginx端口这件事一次说透。
nginx默认端口为什么会是80和443
nginx的核心职责是处理HTTP请求,而HTTP协议的标准端口就是80,HTTPS则是443,这套规则由IANA(互联网号码分配局)统一管理,全世界都遵守,nginx作为HTTP服务器,自然默认绑定80和443,否则浏览器访问网站时还得手动输入端口号,这不符合互联网使用习惯。
nginx配置文件里的默认监听在/etc/nginx/nginx.conf或/etc/nginx/conf.d/目录下的站点配置文件中,你会看到类似这样的内容:
server {
listen 80;
server_name example.com;
...
}
listen 80就是告诉nginx:这个虚拟主机监听80端口,如果配置了SSL证书,通常还会再加一行:
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
}
这就是为什么当你配置HTTPS后,nginx会同时监听80和443两个端口,80端口负责处理HTTP请求,443端口处理加密的HTTPS请求。
查看nginx实际监听端口的方法不确定自己的nginx到底在哪个端口上工作?执行以下命令,一目了然:
netstat -tlnp | grep nginx
输出结果会列出nginx进程占用的所有端口,如果看到0.0.0:80和0.0.0:443,说明nginx正在这两个标准端口上监听,社区里常用ss -tlnp | grep nginx来替代netstat,效果一样。
nginx如何修改默认端口
场景很常见:你在一台服务器上跑了多个Web服务,80端口被Apache或Tomcat占了,nginx只能换个端口工作,修改步骤其实不复杂,按顺序操作即可。
第一步:找到配置文件nginx的配置文件路径因安装方式而异,通过apt或yum安装的nginx,主配置通常在/etc/nginx/nginx.conf

,而站点配置一般在/etc/nginx/conf.d/或/etc/nginx/sites-available/目录下,先执行nginx -T可以打印出完整配置内容,确认当前生效的监听端口。
第二步:修改listen指令假设要把端口改成8080,找到对应的server块,把listen 80改成listen 8080,保存文件后,先测试配置是否正确:
nginx -t
如果输出syntax is ok和test is successful,说明配置没有语法错误,接着重载nginx使配置生效:
nginx -s reload
第三步:处理防火墙和云安全组修改端口后,别急着测试,先确认防火墙放行了新端口,CentOS或Ubuntu系统上,用firewalld或ufw放行端口:
# firewalld firewall-cmd --zone=public --add-port=8080/tcp --permanent firewall-cmd --reload # ufw ufw allow 8080/tcp
如果你用的是简米云、酷番云等云服务器,还需要在控制台的安全组规则里放行8080端口,否则外部网络永远无法访问,这是nginx如何修改端口中最容易忽略的一步,也是最常见的坑。
第四步:nginx配置多个端口的场景同一个站点想同时支持HTTP和HTTPS,或者想在不同端口上跑不同应用,nginx支持在同一配置文件中监听多个端口,示例:
server {
listen 80;
listen 8080;
server_name example.com;
...
}
这样80和8080都会进入这个server块,另一个实用场景是内网服务只监听内网IP的特定端口,外网完全不可见:
server {
listen 192.168.1.10:8080;
...
}
只监听168.1.10这个内网地址,外网IP不会响应这个端口,安全性和灵活性都兼顾了。
nginx端口被占用怎么办
启动nginx时报address already in use错误,是最让人头疼的问题之一,这条报错信息本身就说明端口被别的进程占用了,nginx绑定失败。
排查端口占用步骤
先看看谁占用了80端口:
lsof -i :80

或者用netstat:
netstat -tlnp | grep :80
输出会显示占用进程的PID和程序名称,多数情况下,是Apache、Tomcat或者其他nginx实例占用了端口,确认占用进程后,有两种处理思路:
- 停止占用端口的服务,把端口让给nginx
- 让nginx换个端口,避开冲突
行业共识认为,nginx端口被占用应优先考虑服务架构的合理性,如果两个服务确实需要共存,修改端口比强行停掉一个服务更稳妥,选择修改哪个服务的端口,取决于业务优先级和长期维护成本,没有标准答案。
nginx -t通过但无法启动有时候配置测试没问题,启动时却报错,这种情况通常是配置文件里写了两个server块监听同一个端口,或者listen指令的IP地址写错了,仔细检查nginx -T输出的每个server块,重点看是否有重复监听,启动时报错时,用systemctl status nginx查看详细错误日志,日志里会有具体到出错配置行的信息,比瞎猜快得多。
80端口被占用时直接用nginx -s stop可能无效如果是多个nginx实例在跑,nginx -s stop只会停止主进程对应的实例,另一个nginx实例依然占用端口,此时需要用pkill -f nginx强制清理所有nginx进程,但执行前务必确认服务器上没有正在处理的重要请求,该命令会释放nginx占用的所有端口。
nginx端口配置的安全建议
对外暴露的端口越少,攻击面就越小,nginx端口配置不只是改个数字那么简单,有几点安全实践值得参考。
避免使用非标准端口暴露公网把SSH改成2222、把nginx改成8080并不能真正提升安全性,这种”隐藏端口”的思路实际效果有限,端口扫描工具可以在几秒内探测出开放端口,安全的核心在于访问控制、防火墙规则和及时更新补丁,而不是纠结于端口号是不是默认值,非标准端口更大的价值是减少各类扫描器的日志噪音,让安全监控更容易聚焦在真正的威胁上。
用防火墙限制端口访问来源如果nginx端口只服务于特定IP段,务必在防火墙层面做限制,比如只允许公司出口IP访问管理后台的8080端口:

iptables -A INPUT -p tcp --dport 8080 -s 192.168.1.0/24 -j ACCEPT iptables -A INPUT -p tcp --dport 8080 -j DROP
这样一来,即使端口开放,非授权IP也无法建立TCP连接,配完记得保存规则,防止服务器重启后规则丢失。
监控端口状态和异常连接定期查看nginx日志和端口连接状态,能及时发现异常。ss -tn state established '( dport = :80 or sport = :80 )'可以列出当前所有经过80端口的连接,如果发现大量来自同一IP的连接,可能是在遭受CC攻击,需要结合nginx的limit_req模块做并发限制。
改端口后别忘了更新代理和防火墙规则如果nginx前面还有CDN、负载均衡器或安全组,修改端口后这些环节的转发规则也要同步更新,经常能看到有人改了nginx端口,CDN回源地址没改,导致网站大面积502,每次修改端口前,列一个涉及端口的组件清单,逐项确认。
nginx端口相关的常见问题解答
nginx服务器的是哪个端口? 默认情况下,nginx监听80(HTTP)和443(HTTPS)端口。listen 80或listen 443 ssl指令决定了nginx的监听端口,具体生效值以实际配置为准,执行nginx -T | grep listen即可查看全部配置。
nginx如何修改端口后不影响正在运行的网站? 修改listen指令后执行nginx -t测试配置,再执行nginx -s reload平滑重载,nginx会先完成旧连接的收尾,再启用新端口监听,整个过程通常不会产生请求中断,这就是nginx优雅重载机制带来的优势,注意重载前再次确认新端口未被其他进程占用。
nginx端口冲突导致启动失败如何解决? 先执行lsof -i :80找到占用端口的进程PID,确认进程身份后决定是停止它还是给nginx换端口,用pkill -9 进程名强制终止占用进程,或者修改nginx配置文件中的listen参数避开冲突,执行nginx -t验证无误后再启动,双重保险更稳妥。
图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/843687.html

