nginx 访问 php 文件出现下载,或直接展示 php 文件内容,或者 “500 Internal Server Error” 的解决方案
前言
nginx 作为一个高效的服务器,一直很受欢迎。一般情况下不会出现什么错误(服务器镜像自带版本),但如果碰巧购买了一台没有安装 nginx 的服务器时,在你安装配置 nginx、php 并想访问时,可能会出现很多意想不到的错误。如:nginx 访问 php 文件,直接下载了该文件的内容,或者直接展示该 php 文件的内容,又或者报 403、404、500 Internal Server Error 等类型错误。
解决
403 Access Forbidden
今年买了台新的服务器,之前一直空闲着,前一段时间搞过一个 MySQL 主从复制数据库,但 slave 很容易死掉,然后就不继续执行复制了。然后又想着装 nginx、php,但是装好之后,访问不了,一直报 403 Forbidden
。这个错误大概率是跟虚拟主机根目录设置有关,可以看我之前总结的一片文章:nignx 配置新站点报错:403 access forbidden。主要有两点,一是虚拟主机根目录权限,二是目录索引设置错误(nginx 里对应 root /path/to
指令)。
404 Not Found
这个错误多半还是虚拟主机根目录设置有问题,或者目录下没有相关类型的访问文件。
访问 php 文件变成下载
之前也写过一篇专门针对这个问题的文章:nginx 访问 index.php 文件变成下载。
这个错误与 直接展示 php 文件的内容 基本是同一个原因:php 文件的解析配置错误。
配置内容以下形式:
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
#include fastcgi.conf;
}
没有加入相关的配置,php 文件就不能够被正确的识别和解析,就会出现莫名其妙下载(chrome),或者直接展示文件内容(360)。
这个问题解决的标志就是包含 echo phpinfo()
的 php 文件能够正确执行,输出当前环境下 php 的配置信息。
500 Internal Server Error
内部错误,一般都是框架没有基本配置好导致的。我测试 ci 3.1.11,在未配置 application/config/config.php
中的 base_url 前,会报这个错误。
或者就是虚拟主机配置信息错误,这个一般通过 nginx -t
就能检测出来。
其他问题
在以上问题解决方案尝试过后仍然没有效果时,可以尝试清除浏览器缓存,看是否是缓存在作怪。
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。