Rocky Nginx添加端口
SELinux 限制
非标准端口限制:Rocky Linux 默认只允许 HTTP 服务(Nginx/Apache)绑定到一些特定的端口(如 80, 443, 8080 等)。自定义其他端口不在默认允许的名单里。
发起外网连接限制 默认情况下,SELinux 会禁止 Nginx 进程发起外网连接或连接到非标准端口。即使你的后端服务是正常的,系统内核也会出于安全考虑拦截 Nginx 的转发请求。
因此我们在Rocky Linux系统中添加nginx端口访问,我们需要在两个层面“开绿灯”:SELinux(策略层面) 和Firewalld(防火墙层面)。
一、允许 Nginx 转发网络连接
你不需要关闭防火墙或 SELinux,只需要给 Nginx 开启“网络连接转发”的权限即可。执行以下命令:
setsebool -P httpd_can_network_connect 1在 SELinux 的默认策略中,httpd 是一个公共域(Domain),它涵盖了几乎所有常见的 Web 服务器程序,包括 Nginx、Apache (httpd)、Lighttpd 等
-P 表示永久生效(Persistent),重启后依然有效。
执行完后,不需要重启 Nginx,直接刷新网页试试。
一、在 SELinux(策略层面)中放行该端口
SELinux 默认只允许 Nginx 绑定特定的 HTTP 端口。如果不处理这一步,Nginx 依然会报 Permission denied
1.1 安装工具集(如果尚未安装):
yum install policycoreutils-python-utils1.2 查询当前允许的 HTTP 端口:
# 查询当前允许的 HTTP 端口:
semanage port -l | grep http_port_t
# 将 28422 端口添加到允许列表
semanage port -a -t http_port_t -p tcp 28422
# 删除允许的端口
semanage port -d -t http_port_t -p tcp 28422
# 批量添加端口
semanage port -a -t http_port_t -p tcp 29001-291001.3 重新启动 Nginx:
systemctl restart nginx
二、在防火墙 (Firewalld) 中批量放行
SELinux 允许 Nginx 使用这些端口后,你还需要让外部流量能通过防火墙进来。
设置防火墙
# 1. 永久开放端口范围
firewall-cmd --permanent --add-port=28422/tcp
# 2. 永久开放端口范围
firewall-cmd --permanent --add-port=29001-29100/tcp
# 3. 移除防火墙端口
firewall-cmd --permanent --remove-port=28422/tcp查看防火墙规则
- 只查看放行的端口
如果你只想快速确认你刚才添加的一批端口是否生效,用这个:
# 只查看放行的端口
firewall-cmd --list-ports- 只查看放行的服务
比如开通ssh连接,就是根据ssh服务放行的
firewall-cmd --list-services- 查看所有已激活的规则(最常用)
这个命令会显示当前活动区域(通常是 public)的所有配置,包括允许的服务、端口、转发规则等。
firewall-cmd --list-all输出示例解读:
services: 列出按名称放行的服务(如 http, ssh)。
ports: 列出手动放行的端口(如 28422/tcp, 9001-9100/tcp)。
masquerade: 是否开启了 IP 伪装(NAT 转发)。
重启防火墙
最后需要重载防火墙
# 重新加载配置生效
firewall-cmd --reload
查看端口是否占用
ss -tulpn | grep :28422
# 或者使用 netstat (如果安装了的话)
netstat -tunlp | grep :28422


