この記事では主にPHPを5.3.28から5.3.29にアップグレードするときにNginxで502エラーが発生することを紹介しますので、必要な方は参考にしてください。それ
今日、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エラーが発生し、Webページを開いた瞬間にエラーが報告されました。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
サービスを再起動すると、ウェブサイトが正常に開きました。
Nginx が PHP-FPM に接続されていないようですが、何が問題なのでしょうか? 更新ログを確認したところ、関連するプロジェクトが見つかりませんでした。
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 root 663 9月18日 00:16 php-cgi.sock
これ。 。 。理由は非常に明確です。Nginx が PHP-FPM に接続できないのも不思議ではありません。php-cgi.sock の権限は 700 です。
しかし、ここで疑問が生じます。5.3.29 にアップグレードされていない別のサーバーを確認したのに、同じコンパイルと構成プロセスが 5.3.28 より前のバージョンで正常に機能するのはなぜですか?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
サービスを再起動すると問題は解決します。
http://www.bkjia.com/PHPjc/997705.html
www.bkjia.com