您好!欢迎访问否玩代码!
My title page contents
广告位

Nginx默认端口正常,指定端口却报错?排查指南

栏目: 日期: 浏览:144

你有没有碰到过这样怪异的状况呢, 网站通过80这一端口去访问的时候, 是十分顺畅流利的, 然而假如换成8080这个端口, 就马上弹出“连接被拒绝”的提示? 此类问题在服务器配置当中是极为常见的,特别是当你去部署多个Web服务的时候。今天, 作为技术博主的我, 带领你进行一次全程完整的排查以及修复, 确保是有实际价值、可以操作的干货。

一、基础知识:端口与防火墙

Web服务器, 其默认监听80端口, 也就是HTTP对应的端口, 还有443端口, 即HTTPS对应的端口。当你指定了其他端口, 比如说8080、3000这样的端口, 在客户端发起连接的时候, 服务器必须要确保, 该指定的端口是对外开放的, 并且服务正在监听此端口。核心的疑问在于, 为什么默认的端口能够通畅, 而指定的端口就不行呢? 答案往往是藏在防火墙规则以及服务配置当中的。

二、评测与排查:四大核心步骤

我对最常出现的Nginx与云服务器场景做了模拟, 按照优先级给出了下面这些排查方法。

1. 防火墙规则的“漏网之鱼” ⭐⭐⭐⭐⭐(满分)

现象:80端口通,8080端口不通。

由于, 云服务商安全组, 或者, 本地iptables/firewalld, 准许了默认HTTP端口, 然而, 却没有放行自定义端口。

解决方案

云服务商的控制台, 像阿里云、腾讯云这类的, 于“安全组”里添加进方向规则, 将TCP协议的特定端口, 比如8080予以放行。

本地防火墙(CentOS):

firewall-cmd --zone=public --add-port=8080/tcp --permanent
    firewall-cmd --reload

本地防火墙(Ubuntu):

ufw allow 8080/tcp
    ufw reload

2. Nginx配置监听端口 ⭐⭐⭐⭐

现象:防火墙已放行,但仍无法访问。

缘故是: 针对Nginx的server块来讲, 其并未对该端口进行监听。

解决办法是这样的, 去编辑Nginx配置文件, 也就是那个位于/etc/nginx/conf.d/your.conf的文件, 然后再进行添加, 添加什么, 添加如下内容 , 有标点符号。

server {
      listen 8080;
      server_name your_domain.com;
      # ... 其他配置
  }

然后重载Nginx:

nginx -t && systemctl reload nginx

3. SELinux安全上下文 ⭐⭐⭐

情形是这样的, 防火墙配置是正确无误的, Nginx配置同样也是正确无误的, 然而端口却依然处于没有打通的状态。

缘由在于, SELinux 默认状况下对非标准端口实施了限制。

步骤是这样的, 去查看SELinux的状态, 要使用getenforce这个命令, 要是看到状态是这样的enforcing, 那就需要进行这样的操作, 把端口添加到httpd的上下文。

semanage port -a -t http_port_t -p tcp 8080

4. 服务未启动或端口冲突 ⭐⭐⭐

现象:以上步骤均验证无误。

缘由是, Nginx处于未启动的状态, 或者说8080这个端口已经被别的进程给占据使用了。

解决方案

查看服务所处状态, 方式为: 运用systemctl, 对nginx进行状态查看。

去查看端口是否被占用, 执行这样的操作, 运用netstat -tulpn命令, 然后通过管道符grep去查找8080。

若端口冲突,可更换端口或停止占用进程。

三、结论:从现象到本质

大多情形下, 防火墙规则遗漏乃是罪魁祸首, 建议于配置新端口之后, 先运用telnet你的IP端口或者nc -zv你的IP端口迅速测试连通性, 若依旧报错, 那就依照上述步骤逐条予以检查。

否玩代码编辑 https://www.fouwan.com