web-dev-qa-db-ja.com

php-fpmがnginxに空の応答を返す

nginxは、ロケーションブロックで標準の/etc/nginx/fastcgi_paramsを使用して、fastcgi経由でphp-fpmに接続しています。

コマンドラインからcgi-fcgi -bindを使用して/.status(php-fpm.ini :: ping.path)に接続すると、期待どおりに結果が返されます(X-Powered-Byセット、応答本文など)。

Nginxでリクエストすると、結果は空に戻ります(X-Powered-Byセット、本文の長さまたはコンテンツなし)。 nginxは「有効な」応答を受け取ったため、200を返します。

Tcpdumpを監視して、パリティへの要求をFCGIヘッダーに分離しました(シェルによって設定されたユーザー関連の環境変数を除いて)。

9
David Souther

標準のfactcgi_paramsファイルには、SCRIPT_FILENAMEのキー行が含まれていません。

location ~ \.php$ {
                include fastcgi_params;
                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;
}

追加してnginxを再起動します。

11
shukshin.ivan

さて、あなたの質問は少しあいまいです。いわゆる「死の白い画面」(WSOD)は、無限の量によって引き起こされる可能性があります。しかし、これに遭遇した場合に私がするいくつかのこと:

  • php.iniで以下をアクティブにします。

    display_errors = 1
    display_startup_errors = 1
    error_log = /path/to/file
    error_reporting = -1 ; (the -1 activates absolutely everything)
    log_errors = 1
    
  • php-fpm.confで有効化:

    error_log = /path/to/file
    
  • 各php-fpmプール構成に対してアクティブ化します。

    catch_workers_output = 1
    
  • リクエストを繰り返して、すべてのログをチェックします(nginxエラーログを含む)
  • ログレベルを上げる(nginxでのデバッグなど)

これでも問題を特定できない場合は、完全なシステム情報と構成を投稿してください。それなしでは誰もあなたに正確な答えを出すことはできません。

4
Fleshgrinder