nginx的显示空白的PHP页面(nginx showing blank PHP pages)

2019-07-21 15:59发布

我已经安装在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"

Answer 1:

作为参考,我附上我的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的用户目前和可读性。



Answer 2:

更换

include fastcgi_params;

include fastcgi.conf;

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



Answer 3:

也有这个问题,终于找到了解决办法在这里 。 总之,你需要将下面的行添加到您的nginx的FastCGI的配置文件(/ etc在Ubuntu 12.04 / nginx的/ fastcgi_params)

fastcgi_param PATH_TRANSLATED $document_root$fastcgi_script_name;


Answer 4:

许多用户落入这个线程希望找到空白页面的解决方案,同时使用的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在您的站点配置文件(I,E参数: /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。 两者之间的区别是变量的定义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.ini已经short_open_tag启用(如果你正在测试短代码的PHP页面)。



Answer 5:

请确保您已在/ etc / nginx的/ fastcgi_params得到这个

fastcgi_param SCRIPT_FILENAME $ REQUEST_FILENAME;

谁知道为什么没有了? 这个时间必须共同废物量!



Answer 6:

我写了一个返回从nginx的传递到FastCGI应用程序的环境变量很短的C程序。

#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

编译它,首先安装gcclibfcgi-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的,刷新页面,你应该看到所有的参数显示在您的浏览器为您调试! :-)



Answer 7:

这些提示帮助我与我的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


Answer 8:

在添加此/etc/nginx/conf.d/default.conf

fastcgi_param PATH_TRANSLATED $document_root$fastcgi_script_name;


Answer 9:

如果有人是有这个问题,但上述答案的解决他们的问题,我有这个同样的问题,有困难的时候跟踪下来,因为我的配置文件是正确的,我ngnix和php-fpm的工作岗位运行良好,并有通过任何错误日志来没有错误。

愚蠢的错误,但我在其中设置为我的php.ini文件从来没有检查短打开标签变量short_open_tag = Off 。 由于我的PHP文件是使用<? 而不是<?php的页面被显示为空白。 短打开标签应该被设定为On我的情况。

希望这可以帮助别人。



Answer 10:

出现这个问题的原因是因为在nginx的FastCGI的配置要求是不能发挥作用,并在地方或处理,他们作为HTML数据作出反应。 有两种可能的方式,你可以配置你的nginx来避免这个问题。

  1. 方法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. 方法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; } 

这两种方法都将正常工作,你可以继续前进,把他们中的任何一个。 他们几乎用很少的差别执行相同的操作。



Answer 11:

以上答案都不为我工作 - PHP是正确呈现的一切,除了依靠mysqli的,为此它发送一个空白页200响应代码,而不是抛出任何错误页面。 正如我在OS X,修复只是

sudo port install php56-mysql

其次是PHP-FPM和Nginx的重新启动。

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



Answer 12:

我有一个类似的问题,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



Answer 13:

如果你得到一个空白的屏幕,这可能是由于两个原因:

  1. 正在显示的浏览器从阻塞帧。 在一些浏览器的框架被认为是不安全的。 为了克服这个问题,你可以通过启动phpPgAdmin的的无框版

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

  2. 您已启用的安全特征,为Nginx的X框,选择尝试禁用它。



Answer 14:

这解决了我的问题:

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;
}


Answer 15:

这是我对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;
    }
}

最后一行使得它比其他的答案不同。



Answer 16:

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;
}

祝好运



文章来源: nginx showing blank PHP pages
标签: nginx php