Содержание
Nginx
Тестирование конфигурации:
sudo nginx -t
Перезапустить nginx с проверкой новой конфигурацией:
sudo nginx -s reload
Твики
server_tokens off; #запретить выдавать версию nginx’а на страницах ошибок и в поле “Server” заголовка ответа.
Балансировка
Для активной проверки требуется модуль (не доступен в стандартном nginx): https://github.com/nginx-modules/nginx_upstream_check_module
Пример конфигурации с активной проверкой:
SSL
Создать самоподписанный сертификат и ключ:
openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/nginx/ssl/selfsigned.key -out /etc/nginx/ssl/selfsigned.crt openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048
Генератор SSL конфигурационных файлов для web серверов
Конфигурацию SSL можно выполнить для всех сайтов в секции http.
https://habr.com/ru/post/195808/
http://nginx.org/ru/docs/http/configuring_https_servers.html
log_format
http://nginx.org/ru/docs/http/ngx_http_log_module.html#log_format
На уровне http (/etc/nginx/nginx.conf) в «# Logging Settings»:
log_format detailed '$remote_addr - $remote_user [$time_local] ' '"$request" $status $body_bytes_sent "$http_referer" ' '"$http_user_agent" $request_length $request_time ' '$upstream_response_length $upstream_response_time ' '$upstream_status';
где:
- $request_length – полный размер запроса, включая заголовки и тело, в байтах
- $request_time – время обработки запроса, в миллисекундах
- $upstream_response_length – длинна ответа полученного от отладочного сервера, в байтах
- $upstream_response_time– время затраченное на получение ответа от отладочного сервера, в миллисекундах
- $upstream_status – код статуса ответа от отладочного сервера
В необходимом месте добавляем:
access_log /var/log/nginx/application_access.log detailed;
https://habrahabr.ru/post/308880/ - NGINX: Перехват ошибок 5хх с помощью отладочного сервера
Модули
Модуль ngx_http_autoindex_module
Модуль ngx_http_autoindex_module обслуживает запросы, оканчивающиеся слэшом (‘/’), и выдаёт листинг каталога. Обычно запрос попадает к модулю ngx_http_autoindex_module, когда модуль ngx_http_index_module не нашёл индексный файл.
Пример конфигурации
location / {
autoindex on;
}
Директивы
синтаксис: autoindex on | off;
умолчание: autoindex off;
контекст: http, server, location
- разрешает или запрещает вывод листинга каталога.
синтаксис: autoindex_exact_size on | off;
умолчание: autoindex_exact_size on;
контекст: http, server, location
- определяет, как выводить размеры файлов в листинге каталога: точно или округляя до килобайт, мегабайт и гигабайт.
синтаксис: autoindex_localtime on | off;
умолчание: autoindex_localtime off;
контекст: http, server, location
- определяет, в какой временной зоне выводить время в листинге каталога: в локальной или в UTC.
http://nginx.org/ru/docs/http/ngx_http_autoindex_module.html
Модуль ngx_http_core_module
Директивы
синтаксис: connection_pool_size размер;
умолчание: connection_pool_size 1m;
контекст: http, server
- задаёт максимально допустимый размер тела запроса клиента, указываемый в поле “Content-Length” заголовка запроса. Если размер больше заданного, то клиенту возвращается ошибка 413 (Request Entity Too Large). Следует иметь в виду, что браузеры не умеют корректно показывать эту ошибку. Установка параметра размер в 0 отключает проверку размера тела запроса клиента.
Модуль ngx_http_access_module
Директивы
синтаксис: allow адрес | CIDR | unix | all;
умолчание: -
контекст: http, server, location, limit_except
Разрешает доступ для указанной сети или адреса. Если указано специальное значение unix: (1.5.1), разрешает доступ для всех UNIX-сокетов.
синтаксис: deny адрес | CIDR | unix | all;
умолчание: -
контекст: http, server, location, limit_except
Запрещает доступ для указанной сети или адреса. Если указано специальное значение unix: (1.5.1), запрещает доступ для всех UNIX-сокетов.
Docker
Пример запуска Nginx, в /data/docker/nginx/etc_nginx_conf.d должен существовать default.conf, приложение должно быть в /data/docker/nginx/var_www:
docker run -d -p80:80 --mount type=bind,src=/data/docker/nginx/etc_nginx_conf.d,dst=/etc/nginx/conf.d --mount type=bind,src=/data/docker/nginx/var_www,dst=/var/www/ --name nginx nginx:alpine
Пример для PHP:
nginx-spnego
ingress
Запустить:
k8s
default-ssl-certificate
https://kubernetes.github.io/ingress-nginx/user-guide/tls/#default-ssl-certificate
Установить значение через helm:
helm --namespace ingress-basic upgrade --install --create-namespace nginx-ingress ingress-nginx/ingress-nginx \ --set controller.extraArgs.default-ssl-certificate=namespace/secret-name
https://github.com/kubernetes/ingress-nginx/blob/master/charts/ingress-nginx/values.yaml
или изменить deployment, добавить args --default-ssl-certificate=namespace/secret-name:
kubectl edit deployment/nginx-ingress-controller
https://stackoverflow.com/questions/58972609/kubernetes-ingress-how-to-set-default-ssl-certificate
limit_req
Ошибки
client intended to send too large body
В nginx/error.log. Необходимо увеличить размер connection_pool_size.
open() ".../favicon.ico" failed (2: No such file or directory)
В nginx/error.log. Добавляем в конфигурацию сайта:
location = /favicon.ico {
log_not_found off;
}
Upstream sent too big header while reading response header from upstream
В nginx/error.log. Добавляем в конфигурацию сайта в блок с опцией fastcgi_pass:
fastcgi_buffers 16 32k; fastcgi_buffer_size 32k;
либо в блок с опциями proxy_
proxy_buffer_size 64k; proxy_buffers 4 128k; proxy_busy_buffers_size 128k;
