nginx 访问 php 文件出现下载,或直接展示 php 文件内容,或者 “500 Internal Server Error” 的解决方案

2019-10-15T16:07:00

前言

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 就能检测出来。

其他问题

在以上问题解决方案尝试过后仍然没有效果时,可以尝试清除浏览器缓存,看是否是缓存在作怪。

当前页面是本站的「Baidu MIP」版。发表评论请点击:完整版 »