Nginx + Php5-fpmがphpファイルをレンダリングしない


8

Nginx + Ruby Enterprise Edition + PHP5-fpmとMYSQLをインストールする方法を理解するのに何時間も費やしましたが、最後にすべてがインストールされ、すべて正常に起動したようです。

しかし、何らかの理由でphpファイルが処理されていません。

.htmlファイルは正常に機能しますが、.phpファイルを表示しようとすると、存在していても存在しないように見えます。興味深いことに、存在しない.htmlファイルを表示しようとすると、素晴らしいNginx 404メッセージが表示されますが、.phpファイルを表示すると表示されません。

私の初心者の理解では、設定に問題があるか、NginxとPHP-fpmが互いに通信していないようです。

私はnginx設定ファイルの他の多くの例を見てきましたが、物事の側面は大丈夫だと確信しています。さて...とにかく、これはconfファイルの関連ビットです:

location ~ \.php$ {
   fastcgi_pass 127.0.0.1:9000;
   fastcgi_index index.php;
   fastcgi_param SCRIPT_FILENAME /var/www/eman/$fastcgi_script_name;
   include fastcgi_params;
 }

そして

    fastcgi_connect_timeout 60;
 fastcgi_send_timeout 180;
 fastcgi_read_timeout 180;
 fastcgi_buffer_size 128k;
 fastcgi_buffers 4 256k;
 fastcgi_busy_buffers_size 256k;
 fastcgi_temp_file_write_size 256k;
 fastcgi_intercept_errors on;

どんな助けでも大歓迎です。

編集:テストphpファイル「http://eman.id.au/test.php」から返されるヘッダーは次のとおりです。

HTTP/1.1 404 Not Found =>
Server => nginx/0.8.54
Date => Thu, 16 Dec 2010 19:30:30 GMT
Content-Type => text/html
Connection => close
X-Powered-By => PHP/5.3.2-1ubuntu4.5ppa5~lucid1

回答:


10

私は今日もまったく同じ問題に遭遇したと思います、nginxはリクエストをphp-fpmに送信します(ヘッダーに示されているとおり)にもかかわらず、ファイルが存在し、(PHP /構文)エラーがまったくない場合でも、404を取得します。また、どのログ(nginsまたはphp-fpm)にもエラーは表示されません。

完全なnginx設定を含めていませんが、「サーバー」セクションに「正しく」定義するオプション(正しくありませんか?)がない可能性はありますか?あなたがそうすることを確認する必要があります、それがcの正しい場所を指し、それが「場所」の場所ではなく、「サーバー」セクションの中にあること-例えば:

server {
    root /var/www/eman;
    location ~ \.php$ {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /var/www/eman/$fastcgi_script_name;
        include fastcgi_params;
    }
}

確かではないが、それが問題だったのかもしれない
エマニュエル

私はVPSを再構築して別のチュートリアルを使用して再試行することになりましたが、今は正常に動作しています。:)
エマニュエル

これは私にとってはうまくいき、私はfastcgi_passパラメータにUNIXソケットを使用していました
Sean

1

ヘッダーを確認すると、http://eman.id.au/test.phpが応答すると、が表示されますX-Powered-By: PHP/5.3.2-1ubuntu4.5ppa5~lucid1。リクエストがPHPに渡されなかった場合は表示されません。また、PHPに渡されたファイルパスが見つからない場合、エラーがエコーされます。No input file specified.

サイトがpowered byヘッダーを出力し、No input file specified.エラーがないため、最も可能性の高い原因は、PHPスクリプトにエラーがあり、表示エラーがオフになっていることです。これにより、空白のページとエラーログのエントリが表示されるので、そこを調べて、ページがいっぱいになっていないかどうかを確認してください。


ああ、そうです!! Google Chromeでページを表示していて、404エラーが表示されただけですが、Firefoxで表示したばかりで、空白のページです。PHPスクリプトにエラーはありません。実際、私はすべてのphpを削除しました。その中身はh1タグだけです
Emmanuel

オリジナルの投稿をtest.phpファイルのhttpヘッダーで更新しました
Emmanuel

また、スクリプトが/ var / www / eman /にあり、パスとファイルがPHPプロセスによって読み取りおよび実行可能であることは間違いありません。
マーティンフィヨルドヴァルト2010

はい、スクリプトは間違いなく/ var / www / eman /にあります。test.phpファイルはindex.htmlと同じディレクトリにあり、正常に動作します。それらがPHPプロセスによって読み取り可能かつ実行可能であることを確認するために何をチェックする必要がありますか?それについてはよくわかりません?
Emmanuel

さて、spawn-fcgiまたはphp-fpmを介して何らかの方法でPHPを生成します。生成に使用される構成ファイルまたはコマンドには、プロセスのユーザーが含まれている必要があります。その後、そのユーザーのLinuxパーミッションを確認する必要があります。
Martin Fjordvald、2010

0

いくつかの考え:

   fastcgi_param SCRIPT_FILENAME /var/www/eman$fastcgi_script_name;

これには余分なスラッシュが必要ですか

   fastcgi_param SCRIPT_FILENAME /var/www/eman/$fastcgi_script_name;

NGINXには少し奇妙なキャッシュ機能もあります。そのため、ブラウザーでURLを試すときに、最後に?random = 12391を追加して強制的に更新します。私は設定全体で30分間戸惑っていましたが、それがずっと機能していたことがわかりましたが、キャッシュにつまずかれていました。

あなたはおそらくあなたの場所をもう少し良くエスケープしたいと思うでしょう(これはあなたが抱えているこの問題を引き起こしているわけではありませんが)それはより良い習慣です:

location ~ .php$

location ~ \.php$

.php $は、yourpage.phpだけでなく、yourpagephpなどのリクエストに一致します。


さて、私はconfファイルを編集しましたが、運が悪い...
Emmanuel

URLは次のとおりです。eman.id.au/ test.php、eman.id.au自体はindex.htmlで正常に動作します
Emmanuel

キャッシングのことは真実ではありません。Nginxは、ユーザーが特に指示しない限り何もキャッシュしません。Apacheとは異なりますが、構成ファイルを変更するには、構成ファイルのリロードが必要です。また、ブラウザはリクエストをキャッシュするため、混乱を招く可能性があります。
マーティンフィヨルドヴァルト2010
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.