====== nginx: коллекция ошибок ====== ==== http2 deprecated ==== Ошибка **nginx: [warn] the "listen ... http2" directive is deprecated, use the "http2" directive instead in etc/nginx/nginx.conf :15** Заменить listen 443 ssl http2; На listen 443 ssl; http2 on; Заменить быстро везде sed -i 's/listen 443 ssl http2;/listen 443 ssl;\nhttp2 on;/g' * ==== could not allocate new session in ssl session shared cache le_nginx_ssl while ssl handshaking ==== https://trac.nginx.org/nginx/ticket/621 //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** ssl_session_cache shared:le_nginx_SSL:64m; ssl_session_timeout 1800m; ==== Skipping acquire of configured file 'nginx/binary-i386/Packages' ==== **Ошибка** Skipping acquire of configured file 'nginx/binary-i386/Packages' as repository 'http://nginx.org/packages/ubuntu focal InRelease' doesn't support architecture 'i386' **Решение** Заменить deb http://nginx.org/packages/ubuntu/ focal nginx deb-src http://nginx.org/packages/ubuntu/ focal nginx На deb [arch=amd64] http://nginx.org/packages/ubuntu/ focal nginx deb-src http://nginx.org/packages/ubuntu/ focal nginx ==== 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 ==== Ошибка: connect() to unix:/var/www/php-fpm/www.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 /proc/sys/net/core/somaxconn cat /proc/sys/net/core/netdev_max_backlog Решение: добавить в ''sysctl.conf'' net.core.somaxconn = 65535 net.core.netdev_max_backlog = 65535 Высокие значения указаны лишь для примера и лучше использовать подходящие под конкретную систему. К сожалению это не помогло. Понадобилась еще одна настройки в fpm пуле listen.backlog = 65535 или установить unlimited listen.backlog = -1 FIXME изучить дополнительно / [[https://otus.ru/nest/post/348/|технические детали]] на otus.ru ==== fastcgi_intercept_errors ==== https://ornix.livejournal.com/55738.html ==== nginx: [warn] 4096 worker_connections exceed open file resource limit: 1024 ==== OKGOOGLE. Проверим текущие soft/hard лимиты файловых дескрипторов и открытых файлов для master процесса nginx # cat /proc/$(cat /var/run/nginx.pid)/limits|grep open.files Max open files 1024 4096 files Далее (подсмотрел на stackoverflow кажется) проверим для дочерних процессов (worker) # ps --ppid $(cat /var/run/nginx.pid) -o %p|sed '1d'|xargs -I{} cat /proc/{}/limits|grep open.files Max open files 1024 4096 files Max open files 1024 4096 files Max open files 1024 4096 files Max open files 1024 4096 files Добавить в ''/etc/security/limits.conf'' 16384 nginx soft nofile 16384 nginx hard nofile 16384 В ''nginx.conf'' установить * worker_processes 4; * worker_connections 4096; * worker_rlimit_nofile 16384; for pid in `pidof nginx`; do echo "$(< /proc/$pid/cmdline)"; egrep 'files|Limit' /proc/$pid/limits; echo "Currently open files: $(ls -1 /proc/$pid/fd | wc -l)"; echo; done upd FIXME в centos7 ''/etc/systemd/system/nginx.service.d'' добавить conf [Service] LimitNOFILE=16384 ==== could not build the server_names_hash ==== [[http://nginx.org/ru/docs/http/ngx_http_core_module.html#server_names_hash_bucket_size|server_names_hash_bucket_size]] Ошибка could not build the server_names_hash, you should increase server_names_hash_bucket_size: 32 Просто сделай больше LOL http { ...snip... server_names_hash_bucket_size 64; ...snip... } ==== 413 Request Entity Too Larget ==== Ошибка появляется при загрузке файлов больше 1 мегабайта. Одна из причин — это дефолтные настройки nginx, а точнее параметра **client_max_body_size**, который по умолчанию равен 1m Директива **client_max_body_size** задаёт максимально допустимый размер тела запроса клиента, указываемый в строке "Content-Length" в заголовке запроса. Если размер больше заданного, то клиенту возвращается ошибка "Request Entity Too Large" (413). Следует иметь в виду, что браузеры не умеют корректно показывать эту ошибку. Подробнее в документации[[http://nginx.org/ru/docs/http/ngx_http_core_module.html#client_max_body_size|client_max_body_size]] Решение\\ Изменить размер **client_max_body_size** ==== upstream sent too big header while reading response header from upstream, client ==== Что такое [[http://wiki.nginx.org/NginxHttpProxyModule#proxy_buffer_size|proxy_buffer_size]] и [[http://wiki.nginx.org/NginxHttpProxyModule#proxy_buffers|proxy_buffers]]. Исправляется добавлением двух последних строк в конфиг Nginx: http { include /etc/nginx/mime.types; default_type application/octet-stream; proxy_buffers 8 16k; proxy_buffer_size 32k; А если по-русски, то **proxy_buffer_size** предназначен для хранения, прочтенного с бэкэнда хидера: 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_busy_buffers_size" must be less than the size of all "proxy_buffers" minus one buffer in /etc/nginx/nginx.conf:34017 Итого, если указанных в самом верху настроек мало, корректируем так: 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://forum.nginx.org/read.php?2,188352 * http://phpsuxx.blogspot.com/2009/11/upstream-sent-too-big-header-while.html * http://blog.rackcorp.com/?p=14 ==== Ошибки 404/403 apache+nginx HTTP/1.0 HTTP/1.1 ==== //Небольшая заметка на тему косяка в апаче (это всё-таки он игнорирует то, что ему передали HTTP/1.0, и отдаёт с HTTP/1.1)// В качестве обхода проблемы (особенно если используется не Apache) по идее также должна помочь установка nginx >= 1.1.4 или **chunked_transfer_encoding off**. http://habrahabr.ru/blogs/nginx/135662/ ==== 414 Request URI Too Large ==== **nginx** via https://ruhighload.com/post/414+Request+URI+Too+Large ''large_client_header_buffers 4 16k'' //Здесь 16k байт и будет желаемым размером URL-адреса, а 4 — количеством желаемых буферов// Большой URL, в основном из-за плохого дизайна приложения. FIXME **apache** Увеличиваем размер для [[http://httpd.apache.org/docs/2.2/mod/core.html#limitrequestline|limit request line]] и [[http://httpd.apache.org/docs/2.2/mod/core.html#limitrequestfieldsize|limit request field size]]. LimitRequestLine 102400 LimitRequestFieldSize 102400 ==== 504 SSL_do_handshake() failed ==== via http://dragonflybsd.blogspot.com/2012/04/nginx-504-ssldohandshake-failed.html При проксировании https даже без сертификатов (чисто прокси) при реальной работе ловили SSL_do_handshake() failed (SSL: error:1408C095:SSL routines:SSL3_GET_FINISHED:digest check failed) while SSL handshaking to upstream и 502 Bad Gateway. Как ни странно, гугл дал всего 4 страницы, из которой только 1 была [[http://mailman.nginx.org/pipermail/nginx/2010-October/023224.html|с решением]]: proxy_ssl_session_reuse off; Помогло. Непонятно, что это было и почему... Проверять можно было через openssl s_client -connect www.test.com:81 -state -ssl3 -no_ssl2 -no_tls1 в несколько потоков. ==== 400 Bad Request Request Header Or Cookie Too Large ==== Самое просто решение - почистить куки. Если же сервер наш, можно подкрутить настройки серверов: для nginx [[http://wiki.nginx.org/HttpCoreModule#large_client_header_buffers|это]] large_client_header_buffers 4 8k; Можно выставить например 16к, но дальше будет ошибка Your browser sent a request that this server could not understand. Size of a request header field exceeds server limit. Потому что надо увеличить эти же значения и для apache LimitRequestFieldSize 8190 Можно выставить LimitRequestFieldSize 16380 [[http://dragonflybsd.blogspot.ru/2012/08/400-bad-request-request-header-or.html|via]] ==== could not build the server_names_hash, you should increase server_names_hash_bucket_size: 32 ==== server_names_hash_bucket_size 64; {{tag>linux nginx php php-fpm}}