nginx显示空白的PHP页面

mai*_*aik 155 php nginx

我用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;
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑

这是我的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"
Run Code Online (Sandbox Code Playgroud)

小智 329

更换

include fastcgi_params;
Run Code Online (Sandbox Code Playgroud)

include fastcgi.conf;
Run Code Online (Sandbox Code Playgroud)

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

  • 以下是`fastcgi_params`与`fastcgi.conf`的背景故事:http://blog.martinfjordvald.com/2013/04/nginx-config-history-fastcgi_params-versus-fastcgi-conf/ (29认同)
  • 这为我修好了.`.conf`在`_params`中缺少一个额外的配置参数. (16认同)
  • 这个(当然,`/etc/init.d/nginx restart`)也在2014年9月10日的'nginx`升级之后在Debian Testing上修复了它. (7认同)
  • 在将nginx更新为1.6.2(2014年9月更新)后,这也为我解决了这个问题.必须喜欢随意破坏事物的更新. (6认同)
  • 这段代码不起作用 - 我不知道为什么; 这段代码有效,我不知道为什么.你救了我好几个小时 (4认同)
  • 更新了背景故事的链接:https://blog.martinfjordvald.com/nginx-config-history-fastcgi_params-versus-fastcgi-conf/ (3认同)
  • 这个答案应该是最好的,因为从nginx 1.6.2升级到1.8.0后,所有应该做的就是让它工作 (2认同)
  • 从nginx 1.4.x升级到1.8.x后,这为我修复了! (2认同)
  • 这为我修好了.我在ubuntu 14.04上从nginx 1.4升级到1.8.1.工作在1.4并停止在1.8.1工作.谢谢,让我的一天. (2认同)

Jul*_*Lam 241

作为参考,我附加我的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;
}
Run Code Online (Sandbox Code Playgroud)

仔细检查/path/to/fastcgi-params,并确保nginx用户存在并可读.

  • 'SCRIPT_FILENAME'的最后一行为我做了诀窍:)谢谢 (145认同)
  • 你的解决方案是它的一部分.另一部分在这里http://wildlyinaccurate.com/solving-502-bad-gateway-with-nginx-php-fpm (3认同)
  • 谢谢你,最后一行做了诀窍(当使用Centos附带的1.0版本的nginx时不需要它).我很乐意看到有关这方面的文档有所改进. (3认同)
  • 我遇到了同样的问题,我的解决方案是按照此处所述添加 SCRIPT_FILENAME(不带斜杠 /)。但让我发疯的是为什么我真的需要这样做?我们有另一个 nginx 安装(早于 1.9),这行不是必需的。我找到了这个 https://www.nginx.com/resources/wiki/start/topics/examples/phpfcgi/,如果你将它与你的 fastcgi_params 进行比较,你会发现它很可能与列出的在线版本不同你会看到 SCRIPT_FILENAME 不在那里。为什么?去搞清楚... (2认同)

Con*_*ing 53

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

fastcgi_param PATH_TRANSLATED $document_root$fastcgi_script_name;
Run Code Online (Sandbox Code Playgroud)

  • 在Ubuntu 14.04上工作. (4认同)
  • 非常感谢,这在Ubuntu 12.04 LTS上修复了它. (2认同)
  • 在升级nginx 1.5.4 - > 1.7.4之后也为我固定.非常感谢! (2认同)

Die*_*ino 40

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

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

listen = /var/run/php/php7.2-fpm.sock
Run Code Online (Sandbox Code Playgroud)

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

fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
Run Code Online (Sandbox Code Playgroud)

3)检查文件是否确实存在:

$ file /var/run/php/php7.2-fpm.sock 
/var/run/php/php7.2-fpm.sock: socket
Run Code Online (Sandbox Code Playgroud)

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

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


关于以下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;
   }
Run Code Online (Sandbox Code Playgroud)

检查snippets/fastcgi-php.conf位置存在的文件/etc/nginx/:

$ file /etc/nginx/snippets/fastcgi-php.conf
/etc/nginx/snippets/fastcgi-php.conf: ASCII text
Run Code Online (Sandbox Code Playgroud)

该文件包含php7.2-fpm所需的变量定义列表.变量直接定义或通过包含分离的文件定义.

 include fastcgi.conf;
Run Code Online (Sandbox Code Playgroud)

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

fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
...
fastcgi_param  REDIRECT_STATUS    200;
Run Code Online (Sandbox Code Playgroud)

nginx包含两个可能的参数文件:fastcgi_paramsfastcgi.conf.两者之间的区别是变量的定义SCRIPT_FILENAME:

$ diff fastcgi_params fastcgi.conf 
1a2
> fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
Run Code Online (Sandbox Code Playgroud)

总而言之,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;
}
Run Code Online (Sandbox Code Playgroud)

现在重新加载nginx配置:

$ sudo nginx -s reload
Run Code Online (Sandbox Code Playgroud)

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

/var/www/html/test.php

<pre><?php var_export($_SERVER)?></pre>
Run Code Online (Sandbox Code Playgroud)

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

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


Tim*_*Tim 20

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

fastcgi_param SCRIPT_FILENAME $ request_filename;

谁知道为什么不存在呢?这必须浪费的时间量!


tu-*_*duh 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;
}
Run Code Online (Sandbox Code Playgroud)

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

编译它,首先安装gcclibfcgi-dev,然后运行:

gcc -o fcgi_debug fcgi_debug.c -lfcgi
Run Code Online (Sandbox Code Playgroud)

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

spawn-fcgi -p 3000 -f /path/to/fcgi_debug
Run Code Online (Sandbox Code Playgroud)

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

fastcgi_pass  127.0.0.1:3000;
Run Code Online (Sandbox Code Playgroud)

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


CNS*_*ght 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
Run Code Online (Sandbox Code Playgroud)


小智 5

添加此内容/etc/nginx/conf.d/default.conf:

fastcgi_param PATH_TRANSLATED $document_root$fastcgi_script_name;
Run Code Online (Sandbox Code Playgroud)

  • 您是否介意请详细说明OP的问题究竟是什么以及您的答案如何解决OP的问题? (2认同)