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 の使用中に空白のページが表示される問題の解決策を期待して、多くのユーザーがこのスレッドに入ります。私もその 1 人です。これは、ここでの多くの回答に加えて、私自身の調査 (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の 2 つのパラメーター ファイルが含まれています。両者の違いは 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.iniていることを確認してください (短いタグで PHP ページをテストしている場合)。short_open_tag

于 2015-08-09T15:41:11.580 に答える
25

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

fastcgi_param SCRIPT_FILENAME $request_filename;

なぜこれがまだないのか誰が知っていますか?これがまとめて無駄にしなければならない時間の量!

于 2016-03-25T09:10:03.123 に答える
15

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

コンパイルするには、まず と をインストールgccしてから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 に答える
4

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

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

これが誰かに役立つことを願っています。

于 2014-11-18T19:21:58.260 に答える
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

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

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

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

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

于 2017-06-30T13:37:23.983 に答える