web-dev-qa-db-ja.com

空白の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;
    }
}

編集

ここに私の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"
153
mikeglaz

参考のために、.php拡張子を持つファイルをキャッチするためにlocationブロックをアタッチしています:

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ユーザーが存在し、読み取り可能であることを確認してください。

232
Julian H. Lam

取り替える

include fastcgi_params;

include fastcgi.conf;

nginx.confのfastcgi_param SCRIPT_FILENAME ...を削除します

319
spacepille

また、この問題があり、最終的に解決策を見つけました here 。要するに、nginx fastcgi設定ファイル(Ubuntu 12.04の/ etc/nginx/fastcgi_params)に次の行を追加する必要があります

fastcgi_param PATH_TRANSLATED $document_root$fastcgi_script_name;
53

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.


/etc/nginx/sites-enabled/defaultlocationセクションに関して:

   # 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には2つのパラメータファイルが含まれます:fastcgi_paramsおよびfastcgi.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.inishort_open_tagが有効になっていることを確認してください(短いタグでPHPページをテストする場合)。

35
Diego Pino

これが/ etc/nginx/fastcgi_paramsにあることを確認してください

fastcgi_param SCRIPT_FILENAME $ request_filename;

なぜこれがまだないのか誰が知っていますか?これは集合的に浪費しなければならない時間です!

19
Tim

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を再起動し、ページを更新すると、すべてのパラメーターがブラウザーに表示され、デバッグできるようになります。 :-)

14
tudor

これらのヒントは、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
8
CNSKnight

これを/etc/nginx/conf.d/default.confに追加します:

fastcgi_param PATH_TRANSLATED $document_root$fastcgi_script_name;
5
nomulex

誰かがこの問題を抱えているが、上記の答えのどれもが問題を解決しない場合、私はこの同じ問題を抱えていて、設定ファイルが正しく、ngnixとphp-fpmジョブが正常に実行されていたので、それを追跡するのに苦労しましたエラーログを通じてエラーが発生することはありませんでした。

間抜けな間違いですが、short_open_tag = Offに設定されたphp.iniファイルのShort Open Tag変数をチェックしたことがありません。私のphpファイルは<?ではなく<?phpを使用していたため、ページは空白で表示されていました。私の場合、Short Open TagはOnに設定されているはずです。

これが誰かを助けることを願っています。

3
McLovin

この問題が発生する理由は、nginxのfastcgi構成が必要に応じて機能せず、所定の場所または処理でHTMLデータとして応答するためです。この問題を回避するためにnginxを設定できる方法は2つあります。

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

どちらの方法も適切に機能します。先に進み、いずれかを使用できます。ほとんど同じ操作を実行しますが、わずかな違いがあります。

2

上記の回答はどれもうまくいきませんでした-PHPは、mysqliに依存するページを除くすべてを適切にレンダリングしました。 OS Xを使用しているため、修正は単純に

Sudo port install php56-mysql

その後、PHP-FPMとnginxを再起動します。

古いApache/PHPセットアップからnginxに移行していましたが、php-mysqlphp-fpmのドライバーのバージョンの不一致に気づきませんでした。

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

がんばろう

0
gounane

これは私の問題を解決しました:

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

これは、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;
    }
}

最後の行は、他の回答とは異なります。

0
Witek Bezgin

私は同様の問題を抱えていました、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 を参照してください

0

空白の画面が表示される場合、2つの理由が考えられます。

  1. ブラウザがフレームの表示をブロックしている。一部のブラウザでは、フレームは安全ではないと見なされます。これを克服するには、フレームレスバージョンのphpPgAdminを起動します。

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

  2. X-Frame-OptionsでNginxのセキュリティ機能を有効にしました。無効にしてみてください。

0
Nahid Ali