nginx 正在提供下载而不是 php 页面

nginx is serving a download instead of php page

我今天将 nginx 从 1.8.0 升级到 1.9.7,不得不更改几行以使网站再次运行。现在它适用于 ssl(443) 而不是 http(80)。我不得不将 fastcgi_params 更改为 fastcgi.conf。

当我尝试通过 cloudflare 访问网站时,它说与我的服务器没有连接。直接连接我得到一个下载的文件。看起来像是一个未在浏览器中解压缩的压缩文件。这就是headers。

Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding:gzip, deflate, sdch
Accept-Language:en-US,en;q=0.8
Cache-Control:max-age=0
Connection:keep-alive
Cookie:{hidden}
Host:{Hidden}
Upgrade-Insecure-Requests:1
User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36

浏览器和服务器都没有错误。检查了 nginx 和 php-fpm 日志。

还有什么我可以尝试的吗?

附加信息:我正在使用 easyengine 为该服务器提供动力,但我使用的是 nginx 主线分支。

更新:清除 nginx 并重新安装后,我现在可以访问其标准 http(80) 端口上的所有站点。我拥有的一个 ssl 站点无法通过其 https(443) 连接访问。当我这样做时,它会下载 php 索引文件。所有其他页面都通过 SSL 工作,但索引页面除外。它是一个漂亮的 URL 的 wordpress 网站。所有页面实际上都是 index.php 文件。但这只发生在主页上。 80 和 443 ssl 的侦听指令位于同一虚拟主机部分。

您需要编辑 /etc/nginx/sites-enabled/default 并在默认文件中添加此代码才能在 Nginx 服务器上执行 php 个文件

server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;

root /usr/share/nginx/html;
index index.php index.html index.htm;

location ~ \.php$ {
    try_files $uri =404;
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
}

}

如果您想了解更多信息,请参阅下文 link:click here

问题与 HTTP2 模式有关。从 listen 行中删除 http2 可以解决问题。

server {
listen 80 http2;
listen 443 ssl http2;

更改为:

server {
listen 80;
listen 443 ssl http2;

HTTP2 显然只能在 ssl 上工作。在非 ssl 监听上启用它会导致错误。一切正常,并且在 ssl 上使用 http2 加速。