web服务器默认监听80(http)和443(https)端口,因iana规定其为标准端口,浏览器访问时自动使用,但云服务器需额外配置安全组及本地防火墙放行。

Web服务器监听的是哪个端口?
默认必须是 80(HTTP)或 443(HTTPS),否则浏览器直接访问公网IP时不会命中。Nginx/Apache安装后虽默认监听 80,但云服务商(如阿里云、腾讯云)的安全组默认**不放行任何端口**,这是最常被忽略的一环。
验证方式:在服务器上执行 ss -tlnp | grep ':80',看到进程在监听,不代表外部能访问;必须同时检查安全组规则是否允许入方向 80 和 443 端口的 TCP 流量。
- 阿里云控制台 → 云服务器ECS → 实例 → 安全组 → 配置规则 → 添加入方向规则
- 腾讯云控制台 → 云服务器 → 安全组 → 添加规则,协议类型选“TCP”,端口范围填
80/80或443/443 - 若用
iptables或firewalld,也要确认本地防火墙没拦截(systemctl status firewalld+firewall-cmd --list-ports)
PHP文件为什么返回空白或下载而不是执行?
本质是 Web 服务器没把 .php 请求交给 PHP 处理器,常见于 Nginx + PHP-FPM 组合未正确关联,或 Apache 的 mod_php 没启用。
Nginx 场景下,关键检查点是配置文件中是否包含类似以下内容:
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000; # 或 unix:/run/php/php8.1-fpm.sock
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
漏掉 fastcgi_param SCRIPT_FILENAME 是导致空白页的高频原因;而 fastcgi_pass 地址写错(比如该用 socket 却写了 TCP,或路径不对)会导致 502 错误。
- 确认
php-fpm已启动:systemctl status php8.1-fpm(版本号按实际调整) - 确认 PHP-FPM 监听地址与 Nginx 中
fastcgi_pass一致:grep "listen =" /etc/php/8.1/fpm/pool.d/www.conf - Apache 用户请检查是否已启用模块:
a2enmod php8.1(Ubuntu)或确认LoadModule mpm_prefork_module modules/mod_mpm_prefork.so和LoadModule php_module modules/libphp.so在配置中存在且未被注释
phpinfo() 显示但数据库扩展没加载怎么办?
php -m 列出的模块和 phpinfo() 页面显示的不一致,说明 CLI 和 Web SAPI 使用了不同配置文件或扩展目录。
典型表现:命令行执行 php -m | grep mysqli 能看到,但 phpinfo() 里没有 mysqli 或 pdo_mysql —— 这意味着 Web 服务用的不是你装扩展的那个 PHP 实例。
- 查 Web 使用的
php.ini路径:在phpinfo()页面顶部找Loaded Configuration File行 - 查 CLI 使用的
php.ini:php --ini - 确保扩展在 Web 对应的
php.ini中启用,例如添加extension=mysqli(注意不是.so后缀) - Ubuntu 上 PHP-FPM 默认使用
/etc/php/8.1/fpm/php.ini,Apache mod_php 用/etc/php/8.1/apache2/php.ini,别改错文件
HTTPS 配置后 PHP 项目重定向异常
常见现象:访问 https://domain.com 正常,但提交表单或调用 $_SERVER['HTTPS'] 判定时失效,甚至无限跳转。根本原因是反向代理或负载均衡器(如阿里云 SLB、CDN)终止 HTTPS 后,后端 Nginx/Apache 收到的是 HTTP 请求,但应用代码仍按原始协议判断。
解决方案不是改代码,而是让 Web 服务器信任代理头:
- Nginx:在
server块中加set $real_scheme $scheme;和if ($http_x_forwarded_proto = 'https') { set $real_scheme https; },再用$real_scheme替代$scheme - Apache:启用
mod_headers,加配置SetEnvIf X-Forwarded-Proto https HTTPS=on - Laravel/ThinkPHP 等框架通常提供
TrustedProxy设置,需显式指定X-Forwarded-Proto字段为可信头
没配好这个,连 url() 辅助函数生成的链接都可能是 http:// 开头——问题不在 PHP 本身,而在请求链路中协议信息丢失。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











