いつもお世話になっております。
標記の件につきまして、これまで特に問題なくアクセスできていたのですが、
突然502 Bad Gatewayエラーが発生するようになってしまいました。
エラーログには以下のように出力されております。
Bash
1/var/log/nginx/error.log 2 3[error] 17588#17588: *9 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: XXX.XXX.XXX.XXX, server: sample.com, request: "GET / HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "sample.com"
環境としましては、CentOS6.7上でnginxとphp-fpmを利用しており、
cakePHP2を利用してウェブアプリを開発しています。
Bash
1# cat /etc/redhat-release 2CentOS release 6.7 (Final) 3 4# nginx -v 5nginx version: nginx/1.10.0 6 7# php-fpm -v 8PHP 5.5.35 (fpm-fcgi) (built: Apr 27 2016 14:53:24) 9Copyright (c) 1997-2015 The PHP Group 10Zend Engine v2.5.0, Copyright (c) 1998-2015 Zend Technologies 11 with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2015, by Zend Technologies
nginx導入時にも502 Bad Gatewayエラーが出たことがあり、
いろいろなサイトを参考にタイムアウトの設定などを追加して
解消した経緯があり、その後はずっと問題なくアクセスできていました。
現在の設定ファイルは以下のようになっています。
Bash
1# cat /etc/nginx/nginx.conf 2 3user nginx; 4worker_processes 1; 5 6error_log /var/log/nginx/error.log warn; 7pid /var/run/nginx.pid; 8 9 10events { 11 worker_connections 1024; 12 use epoll; 13} 14 15 16http { 17 include /etc/nginx/mime.types; 18 default_type application/octet-stream; 19 20 log_format main '$remote_addr - $remote_user [$time_local] "$request" ' 21 '$status $body_bytes_sent "$http_referer" ' 22 '"$http_user_agent" "$http_x_forwarded_for"'; 23 24 access_log /var/log/nginx/access.log main; 25 26 sendfile on; 27 tcp_nopush on; 28 tcp_nodelay on; 29 30 keepalive_timeout 0; 31 32 server_tokens off; 33 server_name_in_redirect off; 34 35 gzip on; 36 gzip_disable "msie6"; 37 gzip_vary on; 38 gzip_proxied any; 39 gzip_comp_level 6; 40 gzip_min_length 1024; 41 gzip_types text/plain 42 text/xml 43 text/css 44 application/xml 45 application/xhtml+xml 46 application/rss+xml 47 application/atom_xml 48 application/json 49 application/javascript 50 application/x-javascript; 51 52 fastcgi_intercept_errors on; 53 fastcgi_ignore_client_abort off; 54 fastcgi_buffer_size 256k; 55 fastcgi_buffers 8 512k; 56 fastcgi_busy_buffers_size 512k; 57 fastcgi_temp_file_write_size 512k; 58 59 fastcgi_connect_timeout 600s; 60 fastcgi_send_timeout 600s; 61 fastcgi_read_timeout 600s; 62 send_timeout 600; 63 64 server { 65 listen 80 default_server; 66 server_name _; 67 return 444; 68 } 69 70 server { 71 location /favicon { 72 empty_gif; 73 access_log off; 74 log_not_found off; 75 } 76 77 location @favicon { 78 empty_gif; 79 access_log off; 80 log_not_found off; 81 } 82 } 83 84 include /etc/nginx/conf.d/*.conf; 85 include /etc/nginx/conf.d/vhost/*.conf; 86}
Bash
1# cat /etc/nginx/conf.d/default.conf 2 3server { 4 listen 80; 5 server_name localhost; 6 7 index index.html index.htm index.php; 8 set $root_path '/var/www/html'; 9 root $root_path; 10 11 location / { 12 root $root_path; 13 } 14 15 error_page 500 502 503 504 /50x.html; 16 location = /50x.html { 17 root /usr/share/nginx/html; 18 } 19 20 location ~ \.php$ { 21 root $root_path; 22 fastcgi_pass 127.0.0.1:9000; 23 fastcgi_index index.php; 24 fastcgi_param SCRIPT_FILENAME $root_path$fastcgi_script_name; 25 include fastcgi_params; 26 } 27 28 location ~ /\.ht { 29 deny all; 30 } 31}
Bash
1# cat /etc/nginx/conf.d/vhost/sample.com.conf 2 3server { 4 listen 80; 5 server_name sample.com; 6 7 index index.html index.htm index.php; 8 set $root_path '/var/www/html/APP_DIR/app/webroot'; 9 root $root_path; 10 11 location / { 12 if (!-e $request_filename) { 13 rewrite ^(.+)$ /index.php?url=$1 last; 14 break; 15 } 16 } 17 18 location ~ \.php$ { 19 fastcgi_pass 127.0.0.1:9000; 20 fastcgi_index index.php; 21 fastcgi_intercept_errors on; 22 include fastcgi_params; 23 fastcgi_param SCRIPT_FILENAME $root_path$fastcgi_script_name; 24 fastcgi_param SERVER_NAME $host; 25 } 26 27 location ~* ^/(css|img|js|font)/(.+)$ { 28 root $root_path; 29 } 30 31 location ~ /\.ht { 32 deny all; 33 } 34}
こちらの設定にした後は、502 Bad Gatewayエラーは出なくなっていたのですが、
今回サーバを停止させ、別のDBサーバで構築しているMySQLのテーブル構成を見直して、
再起動させたところ、502 Bad Gatewayエラーが出るようになってしまいました。
nginxに関連する設定は変更していなかったので、DBサーバのテーブル構成は
エラーが出る前の状態に戻してから再起動してみましたが、
502 Bad Gatewayエラーは解消されませんでした。
【icchiiさんのアドバイスにより以下追記】
改めて詳細をチェックしてみると、データベースに接続するページのみ
502が出ておりました。
基本的には全てのページでログインを必須としており、ログイン時に
データベースに登録されているユーザー情報と一致しているかチェックし、
その後はセッションでログイン状態を保持して、ログインしていない場合は
ログインページを表示しておりますが、ログインページではデータベース
にはアクセスしていないためか、正常に表示されておりました。
その後、ログイン処理を行って、ユーザー情報がデータベースの情報と一致するか
チェックする際にデーターベースに接続しますが、その時点でしばらく時間が
経った後に502が出ております。
(ログインできない状態のため、全てのページは確認できておりません)
また、ブラウザアクセス以外で、CRONでデータベースに接続する処理を
いくつか回しておりますが、こちらの方は正常に処理はできております。
今回問題が発生しているウェブサーバ上から直接、DBサーバ上のMySQLに
接続してみましたが、特に遅延なくデータは表示できました。
ブラウザでアクセスして、データベースに接続する処理の場合のみ、
一定時間内にレスポンスを返せなくて502が発生しているようです。
上記を踏まえまして、何か解決のヒントになるようなことがございましたら、
ご教授いただけると助かります。
それでは、よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー