180

我已经用 php5-fpm 设置了一个 nginx 服务器。当我尝试加载网站时,我得到一个没有错误的空白页面。Html 页面服务很好,但不是 php。我尝试在 php.ini 中打开 display_errors 但没有运气。php5-fpm.log 没有产生任何错误,nginx 也没有。

nginx.conf

server {
    listen 80;
    root /home/mike/www/606club;
    index index.php index.html;
    server_name mikeglaz.com www.mikeglaz.com;
    error_log /var/log/nginx/error.log;
    location ~ \.php$ {
            #fastcgi_pass 127.0.0.1:9000;
            # With php5-fpm:
            fastcgi_pass unix:/var/run/php5-fpm.sock;
            fastcgi_index index.php;
            include fastcgi_params;
    }
}

编辑

这是我的 nginx 错误日志:

2013/03/15 03:52:55 [error] 1020#0: *55 open() "/home/mike/www/606club/robots.txt" failed (2: No such file or directory), client: 199.30.20.40, server: mikeglaz.com, request: "GET /robots.txt HTTP/1.1", host: "mikeglaz.com"
4

17 回答 17

357

代替

include fastcgi_params;

include fastcgi.conf;

并在 nginx.conf 中删除 fastcgi_param SCRIPT_FILENAME ...

于 2013-06-02T21:03:13.913 回答
263

作为参考,我附上了我的location块以捕获具有.php扩展名的文件:

location ~ \.php$ {
    include /path/to/fastcgi_params;
    fastcgi_pass  127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
}

仔细检查/path/to/fastcgi_params,并确保 nginx 用户存在并且可以读取它。

于 2013-03-15T04:34:25.970 回答
56

也有这个问题,终于在这里找到了解决方案。简而言之,您需要将以下行添加到您的 nginx fastcgi 配置文件(Ubuntu 12.04 中的 /etc/nginx/fastcgi_params)

fastcgi_param PATH_TRANSLATED $document_root$fastcgi_script_name;
于 2014-03-11T19:30:58.923 回答
54

许多用户陷入此线程,希望找到在使用nginx+php-fpm时显示空白页面的解决方案,我就是其中之一。这是我在阅读了这里的许多答案以及我自己的调查(更新到 php7.2)后最终所做的事情的回顾:

1)打开/etc/php/7.2/fpm/pool.d/www.conf并检查参数的值listen

listen = /var/run/php/php7.2-fpm.sock

2) 参数listen应与fastcgi_pass站点配置文件中的参数匹配(即:)/etc/nginx/sites-enabled/default

fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;

3)检查文件是否真的存在:

$ file /var/run/php/php7.2-fpm.sock 
/var/run/php/php7.2-fpm.sock: socket

4)如果它不存在则意味着php7.2-fpm没有运行,所以你需要重新启动它:

$ sudo /etc/init.d/php7.2-fpm restart
[ ok ] Restarting php7.2-fpm (via systemctl): php7.2-fpm.service.


关于中的location部分/etc/nginx/sites-enabled/default

   # pass PHP scripts to FastCGI server
   #
   location ~ \.php$ {
      include snippets/fastcgi-php.conf;

      # With php-fpm (or other unix sockets):
      fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
   }

检查文件是否snippets/fastcgi-php.conf存在于位置/etc/nginx/

$ file /etc/nginx/snippets/fastcgi-php.conf
/etc/nginx/snippets/fastcgi-php.conf: ASCII text

此文件包含 php7.2-fpm 所需的变量定义列表。这些变量是直接定义的,或者通过包含一个单独的文件来定义。

 include fastcgi.conf;

该文件位于,/etc/nginx/fastcgi.conf它看起来像:

fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
...
fastcgi_param  REDIRECT_STATUS    200;

nginx包括两个可能的参数文件:fastcgi_paramsfastcgi.conf。两者的区别在于 variable 的定义SCRIPT_FILENAME

$ diff fastcgi_params fastcgi.conf 
1a2
> fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;

长话短说,fastcgi.conf应该总是有效的。如果由于某种原因您设置使用fastcgi_params,您应该定义SCRIPT_FILENAME

location ~ \.php$ {
  include snippets/fastcgi-php.conf;

  # With php-fpm (or other unix sockets):
  fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;

  fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
}

现在重新加载 nginx 配置:

$ sudo nginx -s reload

并检查一个 php 文件是否正确显示。例如:

/var/www/html/test.php

<pre><?php var_export($_SERVER)?></pre>

/var/www/html文档根目录的路径在哪里。

如果尽管如此,您仍然看到一个空白文件,请确保您php.inishort_open_tag启用(如果您正在测试带有短标签的 PHP 页面)。

于 2015-08-09T15:41:11.580 回答
25

确保你在 /etc/nginx/fastcgi_params 中有这个

fastcgi_param SCRIPT_FILENAME $request_filename;

谁知道为什么现在还没有?这必须集体浪费的时间!

于 2016-03-25T09:10:03.123 回答
15

我写了一个简短的 C 程序,它返回从 nginx 传递给 fastCGI 应用程序的环境变量。

#include <stdlib.h>
#include <fcgi_stdio.h>
extern char **environ;

int main(int argc, char **argv) {
    char *envvar;
    int i;

    int count = 0;
    while(FCGI_Accept() >= 0) {
        printf("Content-type: text/html\n\n"
               "<html><head><title>FastCGI Call Debug Tool</title></head>\n"
               "<body><h1>FastCGI Call Debugging Tool</h1>\n"
               "<p>Request number %d running on host <i>%s</i></p>\n"
               "<h2>Environment Variables</h2><p>\n",
              ++count, getenv("SERVER_NAME"));
        i = 0;
        envvar = environ[i];
        while (envvar != NULL) {
                printf("%s<br/>",envvar);
                envvar = environ[++i];
        }
        printf("</p></body></html>\n");
    }
    return 0;
}

将此保存到文件中,例如fcgi_debug.c

要编译它,首先安装gccand libfcgi-dev,然后运行:

gcc -o fcgi_debug fcgi_debug.c -lfcgi

要运行它,请安装spawn-fcgi,然后运行:

spawn-fcgi -p 3000 -f /path/to/fcgi_debug

然后,更改您的 nginx fcgi 配置以指向调试程序:

fastcgi_pass  127.0.0.1:3000;

重启nginx,刷新页面,你应该会看到所有参数都出现在浏览器中供你调试!:-)

于 2014-10-29T23:49:28.873 回答
8

这些提示帮助我安装了 Ubuntu 14.04 LTS,

另外我需要short_open_tag打开/etc/php5/fpm/php.ini

$ sudo kate /etc/php5/fpm/php.ini

short_open_tag = On

$ sudo service php5-fpm restart
$ sudo service nginx reload
于 2014-05-26T16:34:33.643 回答
6

将其添加到/etc/nginx/conf.d/default.conf

fastcgi_param PATH_TRANSLATED $document_root$fastcgi_script_name;
于 2014-09-14T22:33:33.733 回答
4

如果有人遇到这个问题,但以上答案都没有解决他们的问题,我遇到了同样的问题并且最难追踪它,因为我的配置文件是正确的,我的 ngnix 和 php-fpm 作业运行良好,并且没有通过任何错误日志出现错误。

愚蠢的错误,但我从未检查过我的 php.ini 文件中设置为short_open_tag = Off. 由于我的 php 文件使用<?而不是<?php,因此页面显示为空白。On在我的情况下,应该将短打开标签设置为。

希望这可以帮助某人。

于 2014-11-18T19:21:58.260 回答
2

出现这个问题的原因是因为 nginx 中的 fastcgi 配置没有按要求运行,并且在适当的位置或处理中,它们以 html 数据响应。有两种可能的方法可以配置您的 nginx 以避免此问题。

  1. 方法一:

        location ~ \.php$ {
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                # With php5-fpm:
                fastcgi_pass unix:/run/php5-fpm.sock;
                fastcgi_index index.php;
                include fastcgi.conf;
        }
    
  2. 方法二:

    location ~ \.php$ {
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            include snippets/fastcgi-php.conf;
            # With php5-fpm:
            fastcgi_pass unix:/var/run/php5-fpm.sock;
            include fastcgi_params;
    }
    

这两种方法都可以正常工作,您可以继续使用其中任何一种。它们几乎执行相同的操作,差别很小。

于 2016-05-31T06:57:37.580 回答
2
location ~ [^/]\.php(/|$) {
         fastcgi_pass unix:/PATH_TO_YOUR_PHPFPM_SOCKET_FILE/php7.0-fpm.sock;
         include fastcgi_params;
         fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
         fastcgi_param SCRIPT_NAME $fastcgi_script_name;
}

祝你好运

于 2019-04-06T20:28:30.913 回答
1

这是我的 UBUNTU 18.04+apache+php7.2 的虚拟主机

server {
    listen 80;
    server_name test.test;
    root /var/www/html/{DIR_NAME}/public;
    location / {
        try_files $uri /index.php?$args;
    }
location ~ \.php$ {
    try_files $uri =404;
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass unix:/run/php/php7.2-fpm.sock;
    fastcgi_index index.php;
    include fastcgi_params;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    }
}

最后一行使它与其他答案不同。

于 2018-12-17T15:32:01.530 回答
0

上面的答案都没有对我有用 - PHP 正确地呈现了除了依赖于 mysqli 的页面之外的所有内容,它正在发送一个带有 200 响应代码的空白页面并且没有抛出任何错误。当我在 OS X 上时,修复很简单

sudo port install php56-mysql

然后重新启动 PHP-FPM 和 nginx。

我正在从较旧的 Apache/PHP 设置迁移到 nginx,但没有注意到驱动程序中的版本不匹配php-mysqlphp-fpm.

于 2014-12-29T22:35:27.203 回答
0

我有一个类似的问题,nginx 正在处理一个页面,然后停止。这里建议的解决方案都不适合我。我通过更改 nginx fastcgi 缓冲来修复它:

fastcgi_max_temp_file_size 0;

fastcgi_buffer_size 4K;
fastcgi_buffers 64 4k;

更改后我的location块看起来像:

location ~ \.php$ {
    try_files $uri /index.php =404;
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_max_temp_file_size 0;
    fastcgi_buffer_size 4K;
    fastcgi_buffers 64 4k;
    include fastcgi_params;
}

有关详细信息,请参阅https://www.namhuy.net/3120/fix-nginx-upstream-response-buffered-temporary-file-error.html

于 2017-04-08T12:39:40.803 回答
0

如果你得到一个空白屏幕,那可能是因为两个原因:

  1. 浏览器阻止框架显示。在某些浏览器中,框架被认为是不安全的。为了克服这个问题,您可以通过以下方式启动 phpPgAdmin 的无框架版本

    http://-your-domain-name-/intro.php

  2. 您已在 Nginx 中为X-Frame-Options启用了一项安全功能,请尝试禁用它。

于 2017-06-30T13:37:23.983 回答
0

这解决了我的问题:

location ~ \.php$ {
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    include snippets/fastcgi-php.conf;
    # With php5-fpm:
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    include fastcgi_params;
}
于 2017-08-16T09:23:09.930 回答
0

我有一个类似的错误,但与 Nextcloud 结合使用。因此,如果这不起作用,请尝试:查看Nginx 手册

于 2019-10-04T20:11:45.087 回答