Nginx + php5-fpm =「ファイルが見つかりません」


14

私はnginx / fpmを使用してサイトをセットアップしている間に壁にぶつかりました。ページに「ファイルが見つかりません」と表示され、nginx error.logに表示されます。

FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream

私はnginxとfpmの両方に慣れていないので、そのエラーメッセージは私には何の意味もありません(グーグルマシンさえ助けていない!)。誰もが何が起こっているのかについて光を当てることができますか?


PHPの処理を定義するnginx構成の一部を追加できますか?
クリストファーペリン

私にとっては、以下の記事は助け:nginxlibrary.com/resolving-no-input-file-specified-error。一般に、このエラーは、に問題がある場合に発生しますSCRIPT_FILENAME
white_gecko

回答:


18

次のlocationように構成されたPHPリクエストを処理するセクションが必要です。

    location ~ \.php$ {
            try_files $uri =404;
            fastcgi_pass    127.0.0.1:9000;
            fastcgi_index   index.php;
            fastcgi_param   SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include         fastcgi_params;
    }

(追加により、任意のファイルがPHPとして実行される可能try_filesあるセキュリティ脆弱性が解決されます。)

さらにrootserverセクションではなく、構成ファイルのセクションで定義する必要がありますlocation。これは最も一般的なnginxの設定ミスの 1つです。


誤設定に関する記事の+1-特にNginxを学習している場合は、読む価値があります。よく書かれたエントリーレベルの、いくつかの素晴らしいヒントがあります!
ベン14年

2

これは、乗客のインストールに関する注意事項です。

php5-fpmで問題を引き起こした乗客を介してソースからnginxをインストールしました。デフォルトのnginx.confは、Michael Hamptonによって記述された問題を利用します。解決策は、ルートおよびインデックスディレクティブの周囲のブロックを削除することです。

location / {
    root html
    index index.html index.htm
}

になる:

root html
index index.html index.htm

さらに、phpブロックが正しく設定されていません。正しい方法については、Michael Hamptonsの回答をご覧ください。

追加の注意点として、ソケットを使用するようにphp5-fpmが設定されている場合、nginx.confのphpブロックのfastcgi_passパラメーターが/etc/php5/fpm/pool.d/www.confのソケット設定を指すようにすることができます。


2

新しいバージョンのnginxでこの問題が発生しました。(古いバージョンから取得した構成)

私がしなければならなかったことは、include fastcgi_params;上記の私のカスタムを次のSCRIPT_FILENAMEように配置することでした:

location @web {
        try_files $uri =404;
        include         fastcgi_params;
        fastcgi_pass    127.0.0.1:9000;
        fastcgi_param   SCRIPT_FILENAME  $document_root/index.php;
}

SCRIPT_FILENAMEが上書きされていたので。


1

ロケーションブロックでエイリアスを使用している場合、未処理の404エラーもこの動作を示します。これは、ブラウザに表示されるページが、きれいなフォーマット(中央)のnginx 404ページではなく、単純なテキスト「ファイルが見つかりません」である場合に表示されます。基本的に、404ページが見つからないということです。

解決するにtry_files $uri =404は、ロケーションブロックに行を追加し、nginxの設定を再読み込みします。特定のセキュリティ脆弱性の解決についてマイケル・ハンプトンが言ったことに加えて、これにより、fastcgiハンドラーはエイリアス定義をオーバーライドし、デフォルトの場所で404スクリプトを見つけることができます。


1
sudo vim /etc/php-fpm.conf

149行目、PHPユーザー&&ユーザーグループの変更

私は今それを成功裏にテストします。


これが正しい方法です!ちょっと男、あなたはそれを試すことができます!

ユーザーとグループを変更するとき、php-fpmを再起動することを忘れないでください。centos6を使用する場合は、次のコマンドを使用できます。sudo service php-fpm restart
Love

0

私は見た :

FastCGIがstderrで送信しました:上流からの応答ヘッダーの読み取り中に「Primary script unknown」

ストレステスト時に高負荷に置かれたサーバーで。私の疑いは、まだ確認されていませんが、OSから利用可能なファイルハンドルが使い果たされたということです。その場合、php-fpmはファイルへの参照を取得できません。

これは投機的であると思いますが、それは確かに私のシナリオに合っており、他の人にも役立つかもしれません。


0

@homewayに感謝します、あなたの答えは私に刺激を与えます。どうもありがとうございました!

私は同じ質問に答えますが、他の方法では質問を解決できませんでした!

私はそれを解決し、キーは次のとおりであると思います: Linux User Rightが質問につながる:FastCGIがstderrで送信されました: "Primary script unknown"

PHP-FPMのデフォルトのuser:groupはapache:apacheであるため、コードディレクトリはsomeBody:someBodyです。そのため、ユーザー権利を変更する必要があります!

この質問を解決するためにブログを書いています。このブログを見ることができます:

[Nginx FastCGIがstderrで送信:「プライマリスクリプトが不明」] [1] `[1]:http : //geekhades.blogspot.com/2017/06/nginx-fastcgi-sent-in-stderr-primary.html

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.