Skip to content

Instantly share code, notes, and snippets.

@CHERTS
Created July 29, 2023 13:39
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save CHERTS/4b1ad58e06404267591636a9f2b08114 to your computer and use it in GitHub Desktop.
Save CHERTS/4b1ad58e06404267591636a9f2b08114 to your computer and use it in GitHub Desktop.
Nginx best config (base config) for Ubuntu
user nginx;
worker_processes auto;
worker_cpu_affinity auto;
worker_rlimit_nofile 10000;
worker_shutdown_timeout 30;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
# Для Linux 2.6+ - epool, Для FreeBSD - kqueue
use epoll;
multi_accept on;
}
http {
##
# Basic Settings
##
# Удаляем информацию об nginx в headers
server_tokens off;
# Метод отправки данных sendfile более эффективен, чем стандартный метод read+write (по умолчанию: off)
sendfile on;
# Будет отправлять заголовки и и начало файла в одном пакете (по умолчанию: off)
tcp_nopush on;
tcp_nodelay on;
# Будет ждать 60 секунд перед закрытием keepalive соединения (по умолчанию: 75s)
keepalive_timeout 60s;
# Задаёт максимальное число запросов, которые можно сделать по одному keep-alive соединению. После того, как сделано максимальное число запросов, соединение закрывается. (по умолчанию: 100)
keepalive_requests 500;
# Разрешает или запрещает сброс соединений по таймауту (по умолчанию: off)
reset_timedout_connection on;
# Будет ждать 30 секунд тело запроса от клиента, после чего сбросит соединение (по умолчанию: 60s)
client_body_timeout 30s;
# В этом случае сервер не будет принимать запросы размером более 256Мб (по умолчанию: 1m)
client_max_body_size 256m;
# Если клиент прекратит чтение ответа, Nginx подождет 30 секунд и сбросит соединение (по умолчанию: 60s)
send_timeout 30s;
# Задаёт максимальный размер хэш-таблиц типов (по умолчанию: 1024)
types_hash_max_size 2048;
# Задаёт максимальный размер хэш-таблиц имён серверов (по умолчанию: 512)
server_names_hash_max_size 8192;
# Задаёт размер корзины в хэш-таблицах имён серверов (по умолчанию: зависит от размера строки кэша процессора)
server_names_hash_bucket_size 128;
include /etc/nginx/mime.types;
default_type application/octet-stream;
##
# SSL Settings
##
# Разрешает указанные протоколы
ssl_protocols TLSv1.2;
# Набор шифров, использовался сайт https://ssl-config.mozilla.org/ в режиме Intermediate
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
# Задаем кривую для ECDHE-шифров
ssl_ecdh_curve prime256v1:secp384r1:secp521r1;
# Указываем, что при использовании протоколов SSLv3 и TLSv1 (мы их не используем, они устарели) серверные шифры были более приоритетны, чем клиентские
ssl_prefer_server_ciphers off;
# Указываем файл с параметрами для DHE-шифров
ssl_dhparam /etc/nginx/ssl/dhparams.pem;
# Задаём тип (разделяемый) и размеры кэшей для хранения параметров сессий
ssl_session_cache shared:MAINSSL:10m;
# Задаёт время, в течение которого клиент может повторно использовать параметры сессии
ssl_session_timeout 1d;
##
# Logging Settings
##
log_format hosting '$remote_addr - $remote_user [$time_local] '
'"$request" $status $bytes_sent '
'"$http_referer" "$http_user_agent" '
'"$gzip_ratio"';
log_format main '$remote_addr - $remote_user [$time_local] '
'"$request" $status $bytes_sent '
'"$http_referer" "$http_user_agent" "$http_x_forwarded_for" "$host" $upstream_response_time';
log_format bytes '$bytes_sent';
log_format download '$remote_addr - $remote_user [$time_local] '
'"$request" $status $bytes_sent '
'"$http_referer" "$http_user_agent" '
'"$http_range" "$sent_http_content_range"';
log_format postdata '$remote_addr [$time_local] "$request" $status "$request_body" "$http_cookie"';
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
##
# Gzip Settings
##
# Включаем сжатие gzip (по умолчанию: off)
gzip on;
# Устанавливает минимальную HTTP-версию запроса, необходимую для сжатия ответа. (по умолчанию: 1.1)
gzip_http_version 1.0;
# Задаёт число и размер буферов, в которые будет сжиматься ответ.
gzip_buffers 64 8k;
# Устанавливает степень сжатия ответа методом gzip. Более 5 лучше не ставить, т.к. будет повышеная нагрузка на CPU, а уровень сжатия изменится незначительно.
gzip_comp_level 5;
# Минимальная длина файла, которую нужно сжимать
gzip_min_length 512;
# MIME-типы файлов в дополнение к text/html, которые нужно сжимать
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript;
# Для IE6 отключить
gzip_disable msie6;
# Cжатие для всех проксированных запросов (для работы NGINX+Apache)(по умолчанию: off)
gzip_proxied any;
##
# nginx fastcgi config
##
# Задаёт размер буфера, в который будет читаться первая часть ответа, получаемого от FastCGI-сервера (по умолчанию: 4k или 8k)
fastcgi_buffer_size 128k;
# Задаёт число и размер буферов для одного соединения, в которые будет читаться ответ, получаемый от FastCGI-сервера(по умолчанию: 8 и 4k или 8k)
fastcgi_buffers 4 256k;
# При включённой буферизации ответов FastCGI-сервера, ограничивает суммарный размер буферов, которые могут быть заняты для отправки ответа клиенту, пока ответ ещё не прочитан целиком (по умолчанию 8k|16k размер ограничен двумя буферами, заданными директивами fastcgi_buffer_size и fastcgi_buffers)
fastcgi_busy_buffers_size 256k;
# Задаёт таймаут при чтении ответа FastCGI-сервера (по умолчанию: 60s)
fastcgi_read_timeout 120s;
## Detect when HTTPS is used
map $scheme $fastcgi_https {
default off;
https on;
}
##
# Virtual Host Configs
##
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment