外部无法访问大概率是firewalld未放行web端口(80/443),而非php端口;需确认php-fpm监听127.0.0.1:9000、firewall-cmd永久放行80/443并重载,严禁公网开放9000端口。

Rocky Linux 9 安装 PHP 8.3.14 后,若通过 Nginx 或 Apache 提供 Web 服务,外部无法访问,大概率是防火墙(firewalld)未放行对应端口。PHP 本身不直接监听网络端口(除非用内置服务器测试),真正需要开放的是 Web 服务器端口(如 80/443)或 PHP-FPM 的 Unix socket / TCP 端口(如 9000 或自定义端口)。下面分三步讲清楚关键操作。
确认 PHP-FPM 是否启用并监听正确地址
PHP 8.3.14 通常搭配 php-fpm 运行。安装完成后需检查其配置是否启用 TCP 监听(而非仅 Unix socket),尤其当你用 Nginx 反向代理到 127.0.0.1:9000 时:
- 编辑主配置:/data/app/php8.3/etc/php-fpm.d/www.conf(路径依你安装目录而定)
- 确认以下两行已取消注释且配置合理:
- listen = 127.0.0.1:9000(或你自定义的端口,如 8300)
- listen.allowed_clients = 127.0.0.1(仅允许本地 Nginx 连接,更安全)
- 重启服务:systemctl restart php-fpm(确保服务名与你注册的一致,如 php83-fpm)
- 验证监听:ss -tlnp | grep :9000 应看到 php-fpm 进程在监听
放行 Web 服务端口(80/443)而非 PHP 端口
绝大多数场景下,你不需要、也不应该把 PHP-FPM 的 9000 端口暴露给公网。firewalld 放行的是用户实际访问的 HTTP/HTTPS 端口:
- 永久放行 80 和 443:
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --permanent --add-port=443/tcp - 如果用了非标端口(比如测试用 8080):
firewall-cmd --permanent --add-port=8080/tcp - 立即重载规则生效:
firewall-cmd --reload - 验证:firewall-cmd --list-ports 应显示你添加的端口
特殊情况:需放行 PHP-FPM TCP 端口(仅限跨主机或调试)
极少数情况(例如 Nginx 与 PHP-FPM 分离部署在不同机器),才需让 firewalld 允许外部连接 PHP-FPM 的 TCP 端口。此时务必限制源 IP:
- 只允许特定管理网段(如 192.168.10.0/24)访问 9000:
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.10.0/24" port port="9000" protocol="tcp" accept' - 禁止全网开放:
不要执行 firewall-cmd --add-port=9000/tcp --permanent(存在严重安全风险) - 重载后检查 rich rule:
firewall-cmd --list-rich-rules
firewalld 在 Rocky Linux 9 中基于 nftables,所有规则必须加 --permanent 并执行 --reload 才能持久生效。临时命令(不带 --permanent)重启后即失效。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











