これは私の最初のnginxです。新しいサーバー上のすべてのサイトで、nginxがある程度の量のトラフィックを処理すると、 "ERROR 502-Bad Gateway!"の処理が開始されるようです。いくつかのログと設定を見てみましょう...
[〜#〜] os [〜#〜]:Ubuntu 16.04(サーバー)
ハードウェア:6コア、12GB RAM
パネル:ISPConfig
nginxバージョン:1.10.3
/var/www/example/log/error.log
:
: Resource temporarily unavailable) while connecting to upstream, client: 216.170.123.179, server: example.com, request: "GET /KHFxygk9 HTTP/1.1", upstream: "fastcgi://unix:/var/lib/php7.0-fpm/web3.sock:", Host: "example.com", referrer: "http://example.com/"
2017/08/10 06:01:06 [error] 15408#15408: *31372 connect() to unix:/var/lib/php7.0-fpm/web3.sock failed (11: Resource temporarily unavailable) while connecting to upstream, client: 192.3.114.12, server: example.com, request: "GET /jiPNQjwp HTTP/1.1", upstream: "fastcgi://unix:/var/lib/php7.0-fpm/web3.sock:", Host: "example.com", referrer: "http://example.com/"
/etc/php/7.0/fpm/pool.d/www.conf
:
[www]
user = www-data
group = www-data
listen = /run/php/php7.0-fpm.sock
listen.owner = www-data
listen.group = www-data
pm = dynamic
pm.max_children = 12
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
pm.max_requests = 500
/etc/nginx/nginx.conf
:
user www-data;
worker_processes auto;
pid /run/nginx.pid;
events {
worker_connections 768;
}
http {
##
# Basic Settings
##
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
##
# SSL Settings
##
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
ssl_prefer_server_ciphers on;
##
# Logging Settings
##
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
##
# Gzip Settings
##
gzip on;
gzip_disable "msie6";
##
# Virtual Host Configs
##
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
~# systemctl status php7.0-fpm
:
● php7.0-fpm.service - The PHP 7.0 FastCGI Process Manager
Loaded: loaded (/lib/systemd/system/php7.0-fpm.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2017-08-10 04:44:16 UTC; 1h 30min ago
Process: 20310 ExecReload=/bin/kill -USR2 $MAINPID (code=exited, status=0/SUCCESS)
Process: 20302 ExecReload=/usr/lib/php/php7.0-fpm-checkconf (code=exited, status=0/SUCCESS)
Process: 13060 ExecStartPre=/usr/lib/php/php7.0-fpm-checkconf (code=exited, status=0/SUCCESS)
Main PID: 13070 (php-fpm7.0)
Status: "Processes active: 20, idle: 12, Requests: 6874, slow: 0, Traffic: 0.3req/sec"
CGroup: /system.slice/php7.0-fpm.service
├─13070 php-fpm: master process (/etc/php/7.0/fpm/php-fpm.conf)
├─13072 php-fpm: pool apps-{fpm_domain}
├─13073 php-fpm: pool apps-{fpm_domain}
├─13074 php-fpm: pool ispconfig
├─13075 php-fpm: pool ispconfig
├─13076 php-fpm: pool web1
├─13077 php-fpm: pool web1
├─13079 php-fpm: pool web2
├─13080 php-fpm: pool web3
├─13081 php-fpm: pool web3
├─13082 php-fpm: pool web4
├─13083 php-fpm: pool web4
├─13084 php-fpm: pool web5
├─13085 php-fpm: pool web5
├─13087 php-fpm: pool www
├─13088 php-fpm: pool www
├─16186 php-fpm: pool web3
├─16603 php-fpm: pool web3
├─16604 php-fpm: pool web3
├─16605 php-fpm: pool web3
├─16609 php-fpm: pool web3
├─16614 php-fpm: pool web3
├─16629 php-fpm: pool web3
├─16630 php-fpm: pool web3
├─18019 php-fpm: pool web2
├─18026 php-fpm: pool web2
├─18027 php-fpm: pool web2
├─18028 php-fpm: pool web2
├─18369 php-fpm: pool web2
├─18370 php-fpm: pool web2
├─18410 php-fpm: pool web2
├─18411 php-fpm: pool web2
└─18413 php-fpm: pool web2
Aug 10 04:44:16 web1.example.com systemd[1]: Stopped The PHP 7.0 FastCGI Process Manager.
Aug 10 04:44:16 web1.example.com systemd[1]: Starting The PHP 7.0 FastCGI Process Manager...
Aug 10 04:44:16 web1.example.com systemd[1]: Started The PHP 7.0 FastCGI Process Manager.
これらのエラーは、ソケット接続の最大許容数が不足していることが原因である可能性があります(ほとんどの場合、デフォルトは128です)。 cat /proc/sys/net/core/somaxconn
を実行すると、現在の制限を表示できます。この制限を増やすことを強くお勧めします。
Sudo echo "net.core.somaxconn = 65535" | tee -a /etc/sysctl.conf
Sudo sysctl -p
そして、それがcat /proc/sys/net/core/somaxconn
に変更されたかどうかを確認します。
また、これらのエラーは、着信接続バックログキューの数が不足していることが原因である可能性があります(ほとんどの場合、デフォルトは1000です)。 cat /proc/sys/net/core/netdev_max_backlog
を実行して現在の制限を確認します。制限を増やすことをお勧めします。
Sudo echo "net.core.netdev_max_backlog = 65535" | tee -a /etc/sysctl.conf
Sudo sysctl -p
変更されたかどうかを確認しますcat /proc/sys/net/core/netdev_max_backlog
注: OpenVZ VPSでこれらの問題が発生した場合、このタイプの仮想化を使用してカーネルパラメータを変更できないため、私のアドバイスに従うことは不可能です。この場合のより良いオプションは、ソケットの代わりにphp-fpmプール構成でリスニングするポートを使用することです(例:listen = 9000)。 Sudo netstat -tunlp
を実行して、使用可能なポートを見つけるためにビジーポートを確認します。
あなたはcfgにいくつかの不一致があります、phpではlisten = /run/php/php7.0-fpm.sock
を定義しますが、nginxはfastcgi://unix:/var/lib/php7.0-fpm/web3.sock
に接続しようとします。両方の場所に同じ値を設定します(phpとnginx)
Php-fpm maxの子の設定を増やす必要がありますpm.max_children
。現在の値は12です。
Php-fpmエラーログも添付できますか?