今日 PHP を 5.3.28 から 5.3.29 にアップグレードしましたが、Web サイトを開けないことがわかり、プロンプトが表示されました。 502 不正なゲートウェイ" "、静的リソースへのアクセスは問題ありませんが、PHP ファイルにアクセスすると 502 になります。
実際、私は以前にもこの問題を発見しましたが、解決策が見つからなかったので、PHP をバージョン 5.3.28 のままにしておきました。
私の以前の気質によれば、すべてのソフトウェアの最新の安定バージョンを入手する必要がありますが、PHP などのソフトウェアは例外です。バージョンが高くなると、多くのプログラムに互換性がなくなるため、比較的言えば 5.3 が最適なバージョンの 1 つです。互換性があります。もちろん 5.2 も利用できます。
私は強迫性障害に本当に耐えられません。公式は 5.3.29 が 5.3 の最後のバージョンだと言いました。この問題が最後のバージョンで発生し、解決されていないのは残念です。
オンラインで検索したところ、この問題を抱えている人はいませんでした。5.3.25 から 5.3.28 まで、同じアップグレード スクリプトが使用されていました。バージョン シリーズが同じである場合、同じコンパイルと設定プロセスであれば問題はありません。
5.3.25 から 5.3.28 までは問題がないのに、5.3.29 以降は問題がないのはなぜですか?
今日やっと問題の根本原因が分かりました、しかも酔っていました…
私は追加のポートを占有したくないため、Nginx と PHP-FPM の間で常に Unix ソケットを使用していましたが、この方法の方が効率的であると言われています。
PHP を 5.3.29 にアップグレードした後、502 エラーが発生しました。このエラーは、PHP の実行タイムアウトによって発生した Nginx プロンプト 502 とは異なり、PHP-FPM が異常終了したようなものでした。または Ngxin が fastcgi にまったく接続されていませんでした。
PHP-FPM を使用したログもイライラします。ログを有効にしてログ パスを設定しましたが、それでもログが生成されません。
それでは、前のアイデアから推測された理由に基づいて問題を見つけてみましょう:
1.PHP-FPM は動作を開始するとすぐに異常終了しました;
2.Ngxin は fastcgi にまったく接続されていません。
502 エラーが発生しても、バックグラウンドの PHP-FPM プロセスは終了せず、まだ正常に動作しているため、最初の可能性は直接排除されます。
次に、おそらく 2 番目の可能性があります。Nginx と PHP-FPM の設定ファイルを従来の「アドレス:ポート」形式に変更しました。
PHP-FPM 構成ファイル内:
聞く = 127.0.0.1:1234
Nginx 設定ファイル内:
fastcgi_pass 127.0.0.1:1234
サービスを再起動すると、Web サイトが正常に開きました。
Nginx が PHP-FPM に接続されていないようなのですが、何が問題なのでしょうか? 5.3.29 では Unix ソケット接続メソッドが削除されましたか?更新ログを確認したところ、関連するプロジェクトは見つかりませんでした。
NginxとPHP-FPMの設定ファイルを元に戻しました。
PHP-FPM 構成ファイル内:
listen = /tmp/php-cgi.sock
Nginx 設定ファイル内:
fastcgi_pass unix:/tmp/php-cgi.sock;
サービスを再起動すると、すぐに 502 が再度取得されます。
まずはテストなのでパーミッションを確認しようと思い、何も言わずにPHP-FPMのsockファイルのパーミッションを777に変更しました。
chmod 777 /tmp/php-cgi.sock
Webページを直接開くと開くことができます!
はい、権限の問題です。サービスを再起動して php-cgi.sock の権限を確認してください。
-rwx------. 1 ルート root 663 9 月 18 日 00:16 php-cgi.sock
これ。 。 。理由は非常に明確です。Nginx が PHP-FPM に接続できないのも不思議ではありません。php-cgi.sock の権限は 700 です。
しかし、ここで疑問が生じます。なぜ同じコンパイルと設定プロセスが 5.3.28 より前のバージョンで正常に機能するのでしょうか? 5.3.29 にアップグレードされていない別のサーバーを確認しました:
srw-rw-rw- 1 root root 0 9月16日 21:11 php-cgi.sock
権限が 666 であることがわかりました。理解できません... 5.3.28 のデフォルトの権限設定は 666 ですが、5.3.29 では 700 になるのはなぜですか?
解決策を見つけるには、PHP ドキュメントを確認してください
PHP-FPM に設定ファイルを追加します。最初の 2 つの項目は php-cgi.sock の所有者とユーザー グループを指定し、最後の項目はファイルのアクセス許可を指定します。
listen.owner = www
listen.group = www
listen.mode = 0666
サービスを再起動すると問題は解決します。