Linux服务器开放PHP网站端口需先确认防火墙工具(UFW/firewalld/iptables),再按工具配置80/443/8080等端口,同步放行SSH、设置默认拒绝策略,最后分层验证监听状态、规则加载及云安全组。

要在Linux服务器上让PHP网站对外提供服务,必须确保Web端口(80/443)和可能的管理端口(如phpStudy面板的8080)不被防火墙拦截,否则用户访问会直接超时或拒绝连接。
确认当前启用的防火墙工具
Ubuntu/Debian系统默认用UFW,CentOS/RHEL系默认用firewalld,但部分PHP环境(如小皮面板部署的Docker容器)可能绕过系统级防火墙,直接依赖iptables规则。先查清实际生效的是哪个:
运行systemctl list-unit-files | grep -E "(ufw|firewalld|iptables)",观察哪项状态为enabled或static;若ufw.service是enabled,就走UFW流程;若firewalld.service是enabled,别碰UFW命令——混用会导致规则冲突、端口看似开放实则不通。
再执行sudo ufw status verbose和sudo firewall-cmd --state双验:前者输出“Status: inactive”且后者报“not running”,说明两个都没启用,此时防火墙形同虚设;若其中一个返回active或running,另一个必须停用:sudo systemctl stop firewalld && sudo systemctl disable firewalld(启用UFW前),或反之。
立即学习“PHP免费学习笔记(深入)”;
UFW放行PHP常用端口(Ubuntu/Debian适用)
UFW配置成败关键在顺序:SSH必须先放通,再设默认拒绝,最后启用,三步缺一不可,否则远程连接立刻中断。
第一步:放行SSH端口
执行sudo ufw allow 22/tcp——【必须写/tcp,否则同时开UDP 22,增加攻击面】;如果你改过SSH端口(比如2222),就写sudo ufw allow 2222/tcp,不能只写数字。
第二步:设置默认策略sudo ufw default deny incoming → sudo ufw default allow outgoing。这一步后所有入站请求都被拒,只有明确allow的才通。
第三步:开放Web服务端口sudo ufw allow 80/tcp → sudo ufw allow 443/tcp。如果用小皮面板,默认Web管理端口是8080,加sudo ufw allow 8080/tcp;若跑的是本地开发环境,还需放开MySQL的3306端口:sudo ufw allow from 127.0.0.1 to any port 3306,避免数据库连不上。
第四步:启用并验证
执行sudo ufw enable,终端提示“Firewall is active and enabled on system startup”才算成功;立即运行sudo ufw status numbered,确认SSH规则排在第1条且状态为ALLOW IN,80/443等规则紧随其后。
iptables直接放行(通用型,适用于Docker或精控场景)
当UFW被禁用或小皮面板以Docker方式运行时,iptables才是底层生效的工具。它不讲默认策略,全靠规则顺序匹配——插错位置就白配。
方法一:插入到INPUT链最前端(推荐)
执行sudo iptables -I INPUT -p tcp --dport 80 -j ACCEPT → sudo iptables -I INPUT -p tcp --dport 443 -j ACCEPT。-I代表插入首行,确保不被后续DROP规则拦截。
方法二:追加到末尾(仅限已确认INPUT默认策略为ACCEPT)
执行sudo iptables -A INPUT -p tcp --dport 8080 -j ACCEPT。但注意:如果INPUT链默认策略是DROP,这条规则永远匹配不到,必须用-I。
必须补两条保命规则:
放行已建立连接:sudo iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT;
放行本地回环:sudo iptables -I INPUT -i lo -j ACCEPT。漏掉任一条,curl localhost:80都会失败。
保存规则防重启丢失:
Ubuntu系统:先安装sudo apt install iptables-persistent,再执行sudo netfilter-persistent save;
CentOS系统:运行sudo service iptables save,规则自动写入/etc/sysconfig/iptables。
验证端口是否真被放行
别只信命令输出,要分层验证:
第一步:查本机监听状态
运行sudo ss -tlnp | grep -E ':80|:443|:8080',必须看到LISTEN状态及对应进程(如nginx/php-fpm),否则是Web服务没启,不是防火墙问题。
第二步:查防火墙规则是否加载
UFW用户执行sudo ufw status verbose,确认80/tcp那行显示“ALLOW IN”;iptables用户执行sudo iptables -L INPUT -n --line-numbers,找对应--dport 80的规则是否在靠前位置。
第三步:从外网实测连通性
在另一台机器上执行telnet your-server-ip 80,通则说明防火墙已放行;若不通,检查云平台安全组(阿里云/腾讯云)是否同步开了80端口——【iptables/UFW生效但安全组没开,照样无法访问】。



















