502 Bad Gateway: nginx, php5-fpm, 175/209 connect () не удалось (111: соединение отклонено) при подключении к восходящему каналу

Запуск магазина 5 на компьютере Debian Jessie с Nginx а также php5-FPM, мы очень часто получаем 502 Неверный шлюз. Это происходит в основном в бэкэнде, когда более длинные операции работают, как создание миниатюр, даже если это делается в небольших кусках отдельных запросов AJAX.

Используемый сервер с 64 ГБ ОЗУ и 16 ядрами вообще спит, потому что на нем нет реального трафика. В настоящее время мы используем его как систему подготовки, если только мы не исправили все ошибки, подобные этой.

В журнале ошибок nginx можно найти следующие строки:

[error] 20524#0: *175 connect() failed (111: Connection refused) while connecting to upstream, client: xx.xx.xx.xx, server: domain.com, request: "POST /backend/MediaManager/createThumbnails HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "www.domain.com", referrer: "http://www.domain.com/backend/"
[error] 20524#0: *175 no live upstreams while connecting to upstream, client: xx.xx.xx.xx, server: domain.com, request: "POST /backend/Log/createLog HTTP/1.1", upstream: "fastcgi://php-fpm", host: "www.domain.com", referrer: "http://www.domain.com/backend/"
[error] 20524#0: *175 connect() failed (111: Connection refused) while connecting to upstream, client: xx.xx.xx.xx, server: domain.com, request: "GET /backend/login/getLoginStatus?_dc=1457014588680 HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "www.domain.com", referrer: "http://www.domain.com/backend/"
[error] 20522#0: *209 connect() failed (111: Connection refused) while connecting to upstream, client: xx.xx.xx.xx, server: domain.com, request: "GET /backend/login/getLoginStatus?_dc=1457014618682 HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "www.domain.com", referrer: "http://www.domain.com/backend/"

Может быть, это примечательно, что сначала много «* 175 соединение» ошибки происходят, а затем, наконец, «* 209 подключиться».

Я постараюсь опубликовать только важные строки, связанные с этой темой, и опущу все те строки, которые закомментированы.

PHP-FPM:

/etc/php5-fpm/pool.d/www.conf:

[www]
user = www-data
group = www-data
listen = /var/run/php5-fpm.sock
listen.owner = www-data
listen.group = www-data
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3

Nginx:

/etc/nginx/nginx.conf:

user www-data;
worker_processes auto;
pid /run/nginx.pid;

events {
worker_connections 768;
multi_accept on;
}

http {
## MIME types.
include /etc/nginx/mime.types;
default_type application/octet-stream;

## Default log and error files.
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;

## Use sendfile() syscall to speed up I/O operations and speed up
## static file serving.
sendfile        on;

## Handling of IPs in proxied and load balancing situations.
# set_real_ip_from        192.168.1.0/24; # set to your proxies ip or range
# real_ip_header          X-Forwarded-For;

## Timeouts.
client_body_timeout             60;
client_header_timeout           60;
keepalive_timeout            10 10;
send_timeout                    60;

## Reset lingering timed out connections. Deflect DDoS.
reset_timedout_connection on;

## Body size.
client_max_body_size 10m;

## TCP options.
tcp_nodelay        on;
## Optimization of socket handling when using sendfile.
tcp_nopush         on;

## Compression.
gzip              on;
gzip_buffers      16 8k;
gzip_comp_level   1;
gzip_http_version 1.1;
gzip_min_length   10;
gzip_types        text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript image/x-icon application/vnd.ms-fontobject font/opentype application/x-font-ttf;
gzip_vary         on;
gzip_proxied      any; # Compression for all requests.
gzip_disable      "msie6";

## Hide the Nginx version number.
server_tokens off;

## Upstream to abstract backend connection(s) for PHP.
upstream php-fpm {
server unix:/var/run/php5-fpm.sock;
# server 127.0.0.1:9000;

## Create a backend connection cache.
keepalive 32;
}

## Include additional configs
include /etc/nginx/conf.d/*.conf;

## Include all vhosts.
include /etc/nginx/sites-enabled/*;
}

/etc/nginx/sites-available/site.conf:

server {
listen 80;
listen 443 ssl;

server_name xxxxxxxx.com;
root /var/www/shopware;

## Access and error logs.
access_log /var/log/nginx/xxxxxxxx.com.access.log;
error_log  /var/log/nginx/xxxxxxxx.com.error.log;

## leaving out lots of shopware/mediafiles-related settings
## ....
## continue:

location ~ \.php$ {
try_files $uri $uri/ =404;

## NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
fastcgi_split_path_info ^(.+\.php)(/.+)$;

## required for upstream keepalive
# disabled due to failed connections
#fastcgi_keep_conn on;

include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SHOPWARE_ENV    $shopware_env if_not_empty;
fastcgi_param ENV             $shopware_env if_not_empty; # BC for older SW versions

fastcgi_buffers 8 16k;
fastcgi_buffer_size 32k;

client_max_body_size 24M;
client_body_buffer_size 128k;

## upstream "php-fpm" must be configured in http context
fastcgi_pass php-fpm;
}

}

Что делать сейчас? Пожалуйста, дайте мне сейчас, если я должен предоставить дополнительную информацию по этому вопросу.

Обновить

После применения настроек nginx и fpm из @peixotorms ошибки в логах nginx изменились на:

30 upstream timed out (110: Connection timed out) while reading response header from upstream

Но сама проблема не решена. У него просто другое лицо …

5

Решение

Это может звучать странно для вас, но ваша проблема, скорее всего, связана с тем, что вы используете PHP на сокете вместо порта tcp. Вы начнете видеть 502 ошибки (и другие), когда у вас будет около 300 одновременных запросов (иногда меньше) к php в конфигурации сокета.

Также ваш pm.max_children слишком низок, если вы не хотите ограничить ваш сервер до примерно 5 одновременных запросов php: http://php.net/manual/en/install.fpm.configuration.php

Настройте его таким образом, и эти ошибки должны исчезнуть:

Для тебя nginx.conf измените следующие значения:

worker_processes 4;
worker_rlimit_nofile 750000;

# handles connection stuff
events {
worker_connections 50000;
multi_accept on;
use epoll;
}

upstream php-fpm {
keepalive 30;
server 127.0.0.1:9001;
}

Ваш /etc/php5-fpm/pool.d/www.conf

(Используйте эти настройки, потому что у вас достаточно или ОЗУ и процессора)

[www]
user = www-data
group = www-data
listen.owner = www-data
listen.group = www-data
listen.mode = 0660
listen = 127.0.0.1:9001
listen.allowed_clients = 127.0.0.1
listen.backlog = 65000
pm = dynamic
pm.max_children = 1024
pm.start_servers = 8
pm.min_spare_servers = 4
pm.max_spare_servers = 16
pm.max_requests = 10000

Также добавьте это на свой location ~ \.php$ { блок:

location ~ \.php$ {
try_files $uri $uri/ =404;

## NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
fastcgi_split_path_info ^(.+\.php)(/.+)$;

## required for upstream keepalive
# disabled due to failed connections
#fastcgi_keep_conn on;

include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SHOPWARE_ENV    $shopware_env if_not_empty;
fastcgi_param ENV             $shopware_env if_not_empty; # BC for older SW versions

fastcgi_keep_conn on;
fastcgi_connect_timeout 20s;
fastcgi_send_timeout 60s;
fastcgi_read_timeout 60s;
fastcgi_pass php-fpm;
}

РЕДАКТИРОВАТЬ:

Измените значения ниже на вашем /etc/php5/fpm/php.ini файл к этому и перезапустите:

safe_mode = Off
output_buffering = Off
zlib.output_compression = Off
max_execution_time = 900
max_input_time = 900
memory_limit = 2048M
post_max_size = 120M
file_uploads = On
upload_max_filesize = 120M
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]