nginx から報告された 502 エラーに基づいて、まずアップストリームに問題があると判断できます。アップストリームに言及する前に、nginx の設定ファイルを一覧表示します (コメントを削除します。nginx のエラー ログのレベルをレベル上げしました)デフォルトのレベルは情報です)。
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log info;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
client_max_body_size 10M;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
keepalive_timeout 65;
include /etc/nginx/conf.d/*.conf;
}
この設定ファイルにはサーバーが明示的に記述されていないため、 include /etc/nginx/conf.d/*.conf; に含まれるデフォルトのサーバー ファイル (/etc/nginx /) を確認する必要があります。 conf.d/default.conf のコメント
cat /etc/nginx/conf.d/default.conf
server {
listen 80 default_server;
server_name _;
include /etc/nginx/default.d/*.conf;
location / {
root /usr/share/nginx/html;
index index.php index.html index.htm;
}
error_page 404 /404.html;
location = /404.html {
root /usr/share/nginx/html;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
if (!-f $document_root$fastcgi_script_name) {
return 404;
}
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
}
}
を削除 暫定的な判断では、nginx の設定に問題はありませんが、php-fpm または php 自体に問題があるはずです (範囲を狭める)問題)。
nginx ログ ファイル (/var/log/nginx/error.log) を確認し、次のプロンプトを見つけます。これは間違いなく php-fpm の問題です。Fastcgi はアップストリームのプロキシとみなすこともできます
2015/08/14 17:05:32 [notice] 9645#0: using the "epoll" event method
2015/08/14 17:05:32 [notice] 9645#0: nginx/1.0.15
2015/08/14 17:05:32 [notice] 9645#0: built by gcc 4.4.7 20120313 (Red Hat 4.4.7-11) (GCC)
2015/08/14 17:05:32 [notice] 9645#0: OS: Linux 2.6.32-504.el6.x86_64
2015/08/14 17:05:32 [notice] 9645#0: getrlimit(RLIMIT_NOFILE): 65535:65535
2015/08/14 17:05:32 [notice] 9646#0: start worker processes
2015/08/14 17:05:32 [notice] 9646#0: start worker process 9648
2015/08/14 17:05:36 [error] 9648#0: *1 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 192.168.1.228, server: 192.168.1.101, request: "GET / HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "192.168.1.101"
2015/08/14 17:09:22 [error] 9648#0: *4 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 192.168.1.228, server: 192.168.1.101, request: "GET / HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "192.168.1.101"
2015/08/14 17:11:23 [error] 9648#0: *7 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 192.168.1.228, server: 192.168.1.101, request: "GET / HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "192.168.1.101"
2015/08/14 17:11:33 [info] 9648#0: *9 client closed prematurely connection while reading client request line, client: 192.168.1.228, server: 192.168.1.101
phpinfo を開くことができるファイルを作成し、php ファイルが正しく解析できるかどうかを確認します (問題の範囲をさらに絞り込みます)
php-fpm が正常に php ファイルを解析できることがわかりました。内部のすべての php コンポーネントは正常に表示されます
phpMyAdmin のバージョンを確認し、公式 Web サイトのドキュメントで php5.3.3 をサポートしているかどうかを確認し、現在の phpMyAdmin がそれをサポートしていることが判明したため、 phpMyAdmin の問題
php-fpm ログ (/var/log /php-fpm/error.log) のチェックを開始すると、次のことがわかりました:
[14-Aug-2015 16:34:53] NOTICE: fpm is running, pid 9522
[14-Aug-2015 16:34:53] NOTICE: ready to handle connections
[14-Aug-2015 16:43:54] WARNING: [pool www] child 9527 exited on signal 11 (SIGSEGV) after 541.401349 seconds from start
[14-Aug-2015 16:43:55] NOTICE: [pool www] child 9614 started
[14-Aug-2015 16:44:00] WARNING: [pool www] child 9526 exited on signal 11 (SIGSEGV) after 547.107407 seconds from start
[14-Aug-2015 16:44:00] NOTICE: [pool www] child 9615 started
[14-Aug-2015 17:05:36] WARNING: [pool www] child 9523 exited on signal 11 (SIGSEGV) after 1843.098829 seconds from start
[14-Aug-2015 17:05:36] NOTICE: [pool www] child 9649 started
このログでは明らかに十分ではありません。問題を解決するには十分な情報があるため、php-fpm および php.ini 設定のログ レベルのいくつかのパラメーターを変更して、ログ レベルを上げ、詳細なエラー情報を取得します。
設定ファイルでログ キーワードを検索するか、ドキュメントまたは情報に従って変更します。いくつかの方法または手順は次のとおりです:
/etc/php-fpm.conf ファイル、ログレベルを Notice から変更します。 debug
log_level = debug
/etc/php-fpm.d/www.conf ファイルに移動し、php ワーカーの標準出力とエラー出力を /dev/null からメイン出力にリダイレクトします。エラー ログ: /var/ log/php-fpm/error.log
catch_workers_output = yes
/etc/php.ini file
error_reporting = E_ALL & ~E_DEPRECATED
display_errors = On
display_startup_errors = On
log_errors = On
track_errors = On
html_errors = On
php-fpm を再起動し、ワーカーで詳細なエラーを見つけます。 :
[14-Aug-2015 17:09:18] NOTICE: fpm is running, pid 9672
[14-Aug-2015 17:09:18] NOTICE: ready to handle connections
[14-Aug-2015 17:09:22] WARNING: [pool www] child 9673 said into stderr: "[Fri Aug 14 17:09:22 2015"
[14-Aug-2015 17:09:22] WARNING: [pool www] child 9673 said into stderr: "] [notice] EACCELERATOR(9673): PHP crashed on opline 30 of PMA_URL_getCommon() at /usr/share/nginx/html/libraries/url_generating.lib.php:188"
[14-Aug-2015 17:09:22] WARNING: [pool www] child 9673 said into stderr: ""
[14-Aug-2015 17:09:22] WARNING: [pool www] child 9673 exited on signal 11 (SIGSEGV) after 4.286828 seconds from start
[14-Aug-2015 17:09:22] NOTICE: [pool www] child 9679 started
[14-Aug-2015 17:11:23] WARNING: [pool www] child 9675 said into stderr: "[Fri Aug 14 17:11:23 2015"
[14-Aug-2015 17:11:23] WARNING: [pool www] child 9675 said into stderr: "] [notice] EACCELERATOR(9675): PHP crashed on opline 30 of PMA_URL_getCommon() at /usr/share/nginx/html/libraries/url_generating.lib.php:188"
エラー メッセージには EACCELERATOR PHP モジュールが記載されているため、まずこのモジュールに問題があるかどうかを確認してください。したがって、最初に /etc/php.d/eaccelerator のサフィックス名を変更してこのモジュールを無効にします.ini ファイルたとえば、mv /etc/php.d/eaccelerator.ini /etc/php.d/eaccelerator.ini~ と入力し、php-fpm を再起動して結果を再度確認すると、問題が解決していることがわかります。
eaccelerator が phpMyAdmin と競合する可能性があるため、phpMyAdmin を使用したい場合は、このモジュールを無効にするか、インストール中にこのパッケージをスキップしてください。
注: eAccelerator は、動的コンテンツ キャッシュを最適化し、PHP スクリプトのキャッシュ パフォーマンスを向上させ、コンパイルされた状態の PHP スクリプトのサーバー オーバーヘッドをほぼ完全に排除する、無料のオープンソース PHP アクセラレータです。また、スクリプトを最適化して実行効率を高速化します。 PHP プログラム コードの実行効率が 1 ~ 10 倍向上します。 (bdbk より)
問題解決アイデアのまとめ
第 0 条、障害診断の鍵となるのはコミュニケーションであり、導入などの問題を詳細に理解する計画、手順、実行された操作など。
まず、経験に基づいて、nginx php-fpm phpMyAdmin は非常に信頼できる組み合わせであるため、これは個人的な問題であり、問題ではないと判断します。バッチの問題があるため、直接開始しました。システムにログインして、インストールされているソフトウェア パッケージを確認します。nginx、php、phpMyAdmin のバージョンを確認する必要があります。このステップは、知識と経験に基づいて予備的な判断を下すのに役立ちます。互換性があるかどうか、未修正のバグがあるかどうかなど。
2 番目に、nginx -t を実行して、nginx 構成ファイルに明示的なエラーがあるかどうかを確認し、nginx の実行ステータスを確認します。
3 番目に、php-fpm -t を実行して構成ファイルを確認します。 php-fpm の明示的なエラーがある場合は、php-fpm
4 番目に、エラー ログを確認します。最初に nginx エラー ログを確認します (これは「最初のサイト」であるため)。 php-fpm ログを確認します。これは「2 番目のシーン」であるためです。
#5 番目に、ログ プロンプトが明らかな場合は、ログ プロンプトに従い、対応する構成ファイルを変更し、問題を再度確認します6 番目に、まだ問題がある場合は、このステップは、問題を解決するための最も重要なステップです。ログのレベルを上げる必要があります。これが、デバッグがデバッグと呼ばれる理由です。. 増やすnginx のログ レベルを情報にします (nginx をデバッグにアップグレードできない理由) コンパイル時に --debug オプションがあります (よくわからない場合は使用する必要はありません)。php ログ レベルをデバッグに上げ、すべての PHP デバッグ スイッチをオンにします。プロンプトをログに記録し、問題を再度確認してください
8 番目、修正を繰り返しても失敗する場合は、公式マニュアルを参照してください。公式マニュアルを参照してください。Google で検索する場合は、Google で検索してください。バグを報告する場合は、バグを報告してください。問題が解決しない場合は、別の方法で問題を解決し、正しい解決策を見つけてください。以下を参照してください:
既存の成功したバージョンの組み合わせを参照し、変更してください。バージョンの組み合わせを変更するか、構成ファイルを変更して環境の違いを排除します。これは問題を迅速に解決するのに適しています
最後に一言: 問題が再現でき、ランダムに表示されない限り、問題は確実にうまく解決されますので、やめないでください。パニックになったり、衝動的になったりしますが、諦めずにゆっくりと落ち着いて対処してください。 ###### - 終わり - ###