Различия
Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия | ||
| linux:nginx:nginx_error [2021/05/17 17:14] – dx | linux:nginx:nginx_error [2024/11/04 14:21] (текущий) – dx | ||
|---|---|---|---|
| Строка 1: | Строка 1: | ||
| + | ====== nginx: коллекция ошибок ====== | ||
| + | ==== http2 deprecated ==== | ||
| + | |||
| + | Ошибка **nginx: [warn] the " | ||
| + | |||
| + | Заменить | ||
| + | |||
| + | <code bash> | ||
| + | |||
| + | На | ||
| + | |||
| + | <code bash> | ||
| + | listen 443 ssl; | ||
| + | http2 on; | ||
| + | </ | ||
| + | |||
| + | Заменить быстро везде | ||
| + | |||
| + | <code bash>sed -i ' | ||
| + | |||
| + | ==== could not allocate new session in ssl session shared cache le_nginx_ssl while ssl handshaking ==== | ||
| + | |||
| + | https:// | ||
| + | |||
| + | //For now you may use smaller session timeouts and/or a larger shared memory zone. This way sessions will expire and will be removed from the cache before the cache will be overflowed, and no errors will happen.// | ||
| + | |||
| + | т.е. **ssl_session_cache** и **ssl_session_timeout** | ||
| + | |||
| + | <code bash> | ||
| + | ssl_session_cache | ||
| + | ssl_session_timeout 1800m; | ||
| + | </ | ||
| + | |||
| + | ==== Skipping acquire of configured file ' | ||
| + | |||
| + | **Ошибка** | ||
| + | |||
| + | < | ||
| + | Skipping acquire of configured file ' | ||
| + | </ | ||
| + | |||
| + | **Решение** | ||
| + | |||
| + | Заменить | ||
| + | |||
| + | < | ||
| + | deb http:// | ||
| + | deb-src http:// | ||
| + | </ | ||
| + | |||
| + | На | ||
| + | |||
| + | < | ||
| + | deb [arch=amd64] http:// | ||
| + | deb-src http:// | ||
| + | </ | ||
| + | |||
| + | ==== upstream timed out (110: Connection timed out) while reading response header from upstream ==== | ||
| + | |||
| + | для apache | ||
| + | < | ||
| + | proxy_connect_timeout 300; | ||
| + | proxy_send_timeout 300; | ||
| + | proxy_read_timeout 300; | ||
| + | </ | ||
| + | |||
| + | для fpm | ||
| + | |||
| + | < | ||
| + | fastcgi_connect_timeout 60; | ||
| + | fastcgi_send_timeout 180; | ||
| + | fastcgi_read_timeout 180; | ||
| + | </ | ||
| + | |||
| + | FIXME | ||
| + | |||
| + | ==== sock failed (11: Resource temporarily unavailable) while connecting to upstream ==== | ||
| + | |||
| + | Ошибка: | ||
| + | |||
| + | Браузер возвращает **502 Bad Gateway**. | ||
| + | |||
| + | nginx работает с php через сокеты. Проблема в дефолтных лимитах | ||
| + | |||
| + | * net.core.somaxconn = 128 (ограничение на количество открытых соединений к файловым сокетам) | ||
| + | * net.core.netdev_max_backlog = 200 (ограничение на количество ожидающих запросов открытия соединений к файловым сокетам) | ||
| + | |||
| + | Посмотреть текущие значения можно так | ||
| + | |||
| + | < | ||
| + | cat / | ||
| + | cat / | ||
| + | </ | ||
| + | |||
| + | Решение: | ||
| + | |||
| + | < | ||
| + | net.core.somaxconn = 65535 | ||
| + | net.core.netdev_max_backlog = 65535 | ||
| + | </ | ||
| + | |||
| + | Высокие значения указаны лишь для примера и лучше использовать подходящие под конкретную систему. | ||
| + | |||
| + | К сожалению это не помогло. | ||
| + | |||
| + | Понадобилась еще одна настройки в fpm пуле | ||
| + | |||
| + | < | ||
| + | |||
| + | или установить unlimited | ||
| + | |||
| + | < | ||
| + | |||
| + | FIXME изучить дополнительно / [[https:// | ||
| + | |||
| + | ==== fastcgi_intercept_errors ==== | ||
| + | |||
| + | https:// | ||
| + | |||
| + | ==== nginx: [warn] 4096 worker_connections exceed open file resource limit: 1024 ==== | ||
| + | |||
| + | OKGOOGLE. Проверим текущие soft/hard лимиты файловых дескрипторов и открытых файлов для master процесса nginx | ||
| + | |||
| + | < | ||
| + | # cat /proc/$(cat / | ||
| + | Max open files 1024 4096 files | ||
| + | </ | ||
| + | |||
| + | Далее (подсмотрел на stackoverflow кажется) проверим для дочерних процессов (worker) | ||
| + | |||
| + | < | ||
| + | # ps --ppid $(cat / | ||
| + | Max open files 1024 4096 files | ||
| + | Max open files 1024 4096 files | ||
| + | Max open files 1024 4096 files | ||
| + | Max open files 1024 4096 files | ||
| + | </ | ||
| + | |||
| + | Добавить в ''/ | ||
| + | 16384 | ||
| + | < | ||
| + | nginx soft nofile 16384 | ||
| + | nginx hard nofile 16384 | ||
| + | </ | ||
| + | |||
| + | В '' | ||
| + | * worker_processes 4; | ||
| + | * worker_connections 4096; | ||
| + | * worker_rlimit_nofile 16384; | ||
| + | |||
| + | < | ||
| + | for pid in `pidof nginx`; do echo " | ||
| + | </ | ||
| + | |||
| + | upd FIXME | ||
| + | |||
| + | в centos7 ''/ | ||
| + | |||
| + | < | ||
| + | [Service] | ||
| + | LimitNOFILE=16384 | ||
| + | </ | ||
| + | |||
| + | ==== could not build the server_names_hash ==== | ||
| + | |||
| + | [[http:// | ||
| + | |||
| + | Ошибка | ||
| + | |||
| + | < | ||
| + | could not build the server_names_hash, | ||
| + | </ | ||
| + | |||
| + | Просто сделай больше LOL | ||
| + | |||
| + | < | ||
| + | http { | ||
| + | |||
| + | ...snip... | ||
| + | server_names_hash_bucket_size 64; | ||
| + | ...snip... | ||
| + | |||
| + | } | ||
| + | </ | ||
| + | |||
| + | ==== 413 Request Entity Too Larget ==== | ||
| + | |||
| + | Ошибка появляется при загрузке файлов больше 1 мегабайта. Одна из причин — это дефолтные настройки nginx, а точнее параметра **client_max_body_size**, | ||
| + | |||
| + | Директива **client_max_body_size** задаёт максимально допустимый размер тела запроса клиента, | ||
| + | |||
| + | Подробнее в документации[[http:// | ||
| + | |||
| + | Решение\\ | ||
| + | Изменить размер **client_max_body_size** | ||
| + | |||
| + | ==== upstream sent too big header while reading response header from upstream, client ==== | ||
| + | |||
| + | Что такое [[http:// | ||
| + | |||
| + | Исправляется добавлением двух последних строк в конфиг Nginx: | ||
| + | |||
| + | < | ||
| + | http { | ||
| + | include / | ||
| + | default_type application/ | ||
| + | |||
| + | proxy_buffers 8 16k; | ||
| + | proxy_buffer_size 32k; | ||
| + | </ | ||
| + | |||
| + | А если по-русски, | ||
| + | |||
| + | < | ||
| + | proxy_buffer_size and fastgci_buffer_size set buffer to read the whole of | ||
| + | response header from backend or fastcgi server. | ||
| + | </ | ||
| + | |||
| + | То есть, если Вы уже выставили 32к, а ошибка все равно появляется, | ||
| + | Если же просто увеличить 32к до 64к, то можно получить вот такую ошибку: | ||
| + | |||
| + | < | ||
| + | Restarting nginx: [emerg]: " | ||
| + | " | ||
| + | </ | ||
| + | |||
| + | Итого, если указанных в самом верху настроек мало, корректируем так: | ||
| + | |||
| + | < | ||
| + | proxy_buffers 8 32k; | ||
| + | proxy_buffer_size 64k; | ||
| + | </ | ||
| + | |||
| + | И еще. fastcgi paramaters that appear to be currently working | ||
| + | |||
| + | < | ||
| + | fastcgi_connect_timeout 60; | ||
| + | fastcgi_send_timeout 180; | ||
| + | fastcgi_read_timeout 180; | ||
| + | fastcgi_buffer_size 128k; | ||
| + | fastcgi_buffers 4 256k; | ||
| + | fastcgi_busy_buffers_size 256k; | ||
| + | fastcgi_temp_file_write_size 256k; | ||
| + | fastcgi_intercept_errors on | ||
| + | </ | ||
| + | |||
| + | * http:// | ||
| + | * http:// | ||
| + | * http:// | ||
| + | |||
| + | ==== Ошибки 404/403 apache+nginx HTTP/1.0 HTTP/1.1 ==== | ||
| + | |||
| + | // | ||
| + | |||
| + | В качестве обхода проблемы (особенно если используется не Apache) по идее также должна помочь установка nginx >= 1.1.4 или **chunked_transfer_encoding off**. | ||
| + | |||
| + | http:// | ||
| + | |||
| + | ==== 414 Request URI Too Large ==== | ||
| + | |||
| + | **nginx** via https:// | ||
| + | |||
| + | '' | ||
| + | |||
| + | // | ||
| + | |||
| + | Большой URL, в основном из-за плохого дизайна приложения. | ||
| + | |||
| + | FIXME **apache** | ||
| + | |||
| + | Увеличиваем размер для [[http:// | ||
| + | |||
| + | < | ||
| + | LimitRequestLine | ||
| + | LimitRequestFieldSize 102400 | ||
| + | </ | ||
| + | |||
| + | ==== 504 SSL_do_handshake() failed | ||
| + | |||
| + | via http:// | ||
| + | |||
| + | При проксировании https даже без сертификатов (чисто прокси) при реальной работе ловили | ||
| + | < | ||
| + | |||
| + | и 502 Bad Gateway. | ||
| + | |||
| + | Как ни странно, | ||
| + | < | ||
| + | |||
| + | Помогло. Непонятно, | ||
| + | |||
| + | ==== 400 Bad Request Request Header Or Cookie Too Large ==== | ||
| + | |||
| + | Самое просто решение - почистить куки. Если же сервер наш, можно подкрутить настройки серверов: | ||
| + | |||
| + | для nginx [[http:// | ||
| + | < | ||
| + | |||
| + | Можно выставить например 16к, но дальше будет ошибка | ||
| + | < | ||
| + | Size of a request header field exceeds server limit.</ | ||
| + | |||
| + | Потому что надо увеличить эти же значения и для apache | ||
| + | < | ||
| + | |||
| + | Можно выставить | ||
| + | < | ||
| + | |||
| + | [[http:// | ||
| + | |||
| + | ==== could not build the server_names_hash, | ||
| + | |||
| + | < | ||
| + | |||
| + | {{tag> | ||