Nginx/fpmを使用してサイトをセットアップしているときに壁にぶつかりました。ページに「ファイルが見つかりません」と表示され、nginx error.logに表示されます。
FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream
私はnginxとfpmの両方に不慣れです。そのエラーメッセージは私には何の意味もありません(Googleマシンでも役に立たなかったのです!)。誰かが何が起こっているのかを理解することはできますか?
次のように構成されたPHPリクエストを処理するためのlocation
セクションが必要です。
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;
}
(追加try_files
は セキュリティの脆弱性 を解決し、任意のファイルをPHPとして実行する可能性があります。)
さらに、root
は構成ファイルのserver
セクションで定義する必要があります。notlocation
セクション。これは最も一般的な nginxの設定ミス の1つです。
これは、乗客のインストールに関する注記です。
ソースからパッセンジャー経由でnginxをインストールしたところ、php5-fpmで問題が発生しました。デフォルトの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のソケット設定を指すようにすることができます。
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
は上書きされていました。
Sudo vim /etc/php-fpm.conf
149行目について、phpユーザーとユーザーグループを変更
私は今それを成功させてテストします。
ロケーションブロックでエイリアスを使用している場合、未処理の404エラーもこの動作を示す可能性があります。これは、ブラウザーに表示されたページが、よりきれいにフォーマットされた(中央に配置された)nginx 404ページではなく、単純なテキスト「ファイルが見つかりません」である場合に確認できます。基本的には、404ページが見つからないということです。
解決するには、ロケーションブロックにtry_files $uri =404
行を追加して、nginx設定を再読み込みします。 Michael Hampton が 特定のセキュリティの脆弱性を解決する について述べたことに加えて、これによりfastcgiハンドラーがエイリアス定義を上書きし、デフォルトの場所で404スクリプトを見つけることができます。
私は見た :
Stderrで送信されたFastCGI:上流からの応答ヘッダーの読み取り中に「プライマリスクリプトが不明」
ストレステスト時に高負荷下に置かれたサーバーで。まだ確認されていない私の疑いは、OSから利用可能なファイルハンドルが使い果たされたということです。その場合、php-fpmはファイルへの参照を取得できません。
これは投機的であることに気づきましたが、それは確かに私のシナリオに合い、他の誰かを助けるかもしれません。
@homewayに感謝します。あなたの答えが私を刺激します。どうもありがとうございました!
同じ質問に会いましたが、他の方法では問題を解決できませんでした。
私はそれを解決します、私はキーがそれを見つけることを見つけます:Linuxユーザー権利質問につながる:stderrで送信されたFastCGI:「不明なプライマリスクリプト」
PHP-FPMのデフォルトのuser:groupはApache:apacheですが、コードディレクトリはsomeBody:someBodyです。したがって、ユーザー権利を変更する必要があります!
私はこの質問を解決するためにブログを書きます、あなたはこのブログを見ることができます:
[stderrで送信されたNginx FastCGI: "Primary script unknown"] [1] `[1]: http://geekhades.blogspot.com/2017/06/nginx-fastcgi-sent-in-stderr-primary .html