@Aleha29
Программист

Ошибки в NGINX open socket left in connection и tcp 127.0.0.1:9000 TIME_WAIT?

Есть web-сервер работает на связке NGINX + PHP-FPM. Перешли на https, приняли решение сделать поддержку http2, пришлось поставить новый NGINX. После "nginx restart" в логах "nginx/error.log" валится:

nginx/error.log
2017/07/23 13:48:30 [notice] 3284#3284: signal process started
2017/07/23 13:48:30 [alert] 2892#2892: *33356 open socket #11 left in connection 4
2017/07/23 13:48:30 [alert] 2887#2887: *33398 open socket #44 left in connection 15
2017/07/23 13:48:30 [alert] 2892#2892: *33364 open socket #38 left in connection 23
2017/07/23 13:48:30 [alert] 2884#2884: *33395 open socket #23 left in connection 16
2017/07/23 13:48:30 [alert] 2892#2892: aborting
2017/07/23 13:48:30 [alert] 2887#2887: aborting
2017/07/23 13:48:30 [alert] 2884#2884: aborting
и т.д...


netstat -n -t -o | grep timewait выдает:
tcp 0 0 127.0.0.1:9000 127.0.0.1:38936 TIME_WAIT timewait (3.17/0/0)
tcp 0 0 127.0.0.1:9000 127.0.0.1:40763 TIME_WAIT timewait (48.73/0/0)
tcp 0 0 127.0.0.1:9000 127.0.0.1:37674 TIME_WAIT timewait (0.00/0/0)
tcp 0 0 127.0.0.1:9000 127.0.0.1:37464 TIME_WAIT timewait (0.00/0/0)
и таковых очень много...


Используемые версии ПО:
Ubuntu 14.04.5 LTS
nginx/1.12.1
OpenSSL 1.0.2l
PHP 5.5.9


------------------------------
Из файла конфигурации NGINX:
------------------------------
worker_processes 8;

events {
worker_connections 25000;
multi_accept on;
use epoll;
}

http {
sendfile on;
tcp_nopush on;
tcp_nodelay on;

client_max_body_size 30m;
client_header_timeout 15;
client_body_timeout 15;
send_timeout 10;
keepalive_timeout 30 15;
types_hash_max_size 2048;
reset_timedout_connection on;

gzip on;
server_tokens off;

upstream backend {
server 127.0.0.1:9000;
}

server {
listen 443 ssl http2;
listen [::]:443 ssl http2;

server_name sitename.com;

ssl_certificate /path/sitename_com.crt;
ssl_certificate_key /path/sitename_com.key;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:100m;
ssl_dhparam /path/dhparam.pem;

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers '...';
ssl_prefer_server_ciphers on;
add_header Strict-Transport-Security max-age=15768000;

ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /path/sitenamecab.pem;
resolver ip-adress; #ip-адрес из "resov.conf"

gzip off;

location ~ \.php$ {
fastcgi_index index.php;
fastcgi_pass backend;
fastcgi_buffer_size 128k;
fastcgi_buffers 8 256k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
fastcgi_param HTTP_SCHEME https;
include fastcgi.conf;
}
}

server {
listen 80;
... тут почти тоже самое, что и для listen 443 кроме - нет записей для ssl, gzip on и нет fastcgi_param HTTP_SCHEME https;
}

}


------------------------------
Из файла конфигурации PHP-FPM:
------------------------------
listen = 127.0.0.1:9000
listen.allowed_clients = 127.0.0.1
listen.backlog = 3000
pm = static
pm.max_children = 2000
pm.max_requests = 3000

------------------------------

До установки новой версии NGINX, со старой (nginx/1.4.6) таких ошибок не было. Сервер работает, сайт открывается, но думаю так оставлять нельзя. В сети о таких проблемах есть информация, но как исправить не понятно. Если убрать из "nginx.conf" секцию "server" с "ssl и http2" и оставить только "server" с "listen 80;" ничего не меняется (естестственно, перезапуская после изменения NGINX). Также ничего не меняется, если уменьшить "worker_connections", например с 25000 до 2000, и если уменьшить, например, с 2000 до pm.max_children = 500 и с 3000 до pm.max_requests = 750 (естестственно, перезапуская после измения php-fpm) тоже не решает данной проблемы. Что делать? Куда смотреть?
  • Вопрос задан
  • 8372 просмотра
Пригласить эксперта
Ответы на вопрос 1
Endru9
@Endru9
Админ Linux
1. зачем указывать ssl в строке "listen 443 ssl http2;" ? оставляй только "listen 443 http2;"
2. медленно обрабатывает запросы backend, смотри логи php-fpm, смотри нагрузку в целом, может тебя боты атакуют.
3. попробуй использовать php-fpm перевести в сокет, вместо tcp.
4. акселераторы и кэширование настроено?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы