Appearance
问题现象
在浏览器中输入域名访问系统时,没有渲染出网页,而是浏览器直接弹窗下载了一个名为 index.php 或 download 的文本文件。
根本原因
在标准的 Nginx Web 服务器工作流中:
- 当请求到达 Nginx 后,若该请求没有命中任何反向代理规则(
proxy_pass),也没有命中任何 PHP 解析器(如 FastCGIfastcgi_pass),Nginx 会将其视为普通静态文件。 - 由于 Nginx 的 MIME 映射表将
.php视为二进制数据流(application/octet-stream),Nginx 会向浏览器下发文件下载响应头(Content-Disposition),从而导致浏览器自动下载了 PHP 源码文件。
造成该现象的具体场景:
- 未配置反向代理:站点刚创建时选择了“纯静态”模式,但后续没有添加反向代理规则将请求转发给 Swoole。
- 反向代理规则未覆盖根路径
/:反向代理的location路径写错(例如写成了location /api,导致根路径/依然走静态文件查找)。 - 宝塔面板反向代理被意外停用或清除。
解决方案
检查并补全 Nginx 反向代理规则
打开站点 Nginx 配置文件,确保在 server 块内正确配置了代理到 Swoole 端口(默认 20697)的规则:
nginx
location / {
proxy_pass http://127.0.0.1:20697;
proxy_http_version 1.1;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Authori-zation $http_authori_zation;
}重载 Nginx 服务
在终端中执行测试与重载命令:
bash
nginx -t && nginx -s reload强制刷新浏览器
由于浏览器可能会缓存“下载文件”的响应行为,请按 Ctrl + F5(Mac 用户 Cmd + Shift + R)或清除浏览器缓存后再打开首页。