{"id":16904437,"url":"https://github.com/insspb/nginx-config","last_synced_at":"2025-04-11T14:40:39.124Z","repository":{"id":95704306,"uuid":"94588846","full_name":"insspb/nginx-config","owner":"insspb","description":"Полезные шаблоны конфигов для Nginx","archived":false,"fork":false,"pushed_at":"2017-06-16T23:56:47.000Z","size":18,"stargazers_count":24,"open_issues_count":1,"forks_count":9,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-03-25T10:42:50.735Z","etag":null,"topics":["configuration","nginx","nginx-configuration","nginx-snippets","snippets","web-server"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/insspb.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-06-16T23:43:51.000Z","updated_at":"2025-01-06T11:13:03.000Z","dependencies_parsed_at":"2023-03-09T13:00:18.308Z","dependency_job_id":null,"html_url":"https://github.com/insspb/nginx-config","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/insspb%2Fnginx-config","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/insspb%2Fnginx-config/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/insspb%2Fnginx-config/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/insspb%2Fnginx-config/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/insspb","download_url":"https://codeload.github.com/insspb/nginx-config/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248420139,"owners_count":21100321,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["configuration","nginx","nginx-configuration","nginx-snippets","snippets","web-server"],"created_at":"2024-10-13T18:33:23.241Z","updated_at":"2025-04-11T14:40:39.116Z","avatar_url":"https://github.com/insspb.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# Полезные шаблоны конфигов для Nginx\n## Содержание\n- [Команды Nginx](#Команды-nginx)\n- [Блок location на PHP](#Блок-location-на-php)\n- [Перенаправления](#Перенаправления)\n    - [Перенаправление на www](#Перенаправление-на-www)\n    - [Перенаправление на no-www](#Перенаправление-на-no-www)\n    - [Перенаправление на HTTPS](#Перенаправление-на-https)\n    - [Слеш в конце адресной строки](#Слеш-в-конце-адресной-строки)\n    - [Перенаправление со страницы на страницу](#Перенаправление-со-страницы-на-страницу)\n    - [Перенаправление с сайта на сайт](#Перенаправление-с-сайта-на-сайт)\n    - [Перенаправление на определенный путь в URI](#Перенаправление-на-определенный-путь-в-uri)\n- [Производительность](#Производительность)\n    - [Кэширование](#Кэширование)\n    - [Gzip сжатие](#gzip-сжатие)\n    - [Кэш файлов](#Кэш-файлов)\n    - [SSL Кэш](#ssl-кэш)\n    - [Поддержка Upstream](#Поддержка-upstream)\n- [Мониторинг](#Мониторинг)\n- [Безопасность](#Безопасность)\n    - [Активация базовой аунтификации](#Активация-базовой-аунтификации)\n    - [Открыть только локальный доступ](#Открыть-только-локальный-доступ)\n    - [Защита SSL настроек](#Защита-ssl-настроек)\n- [Прочее](#Прочее)\n    - [Подзапросы после завершения](#Подзапросы-после-завершения)\n    - [Распределение ресурсов между источниками](#Распределение-ресурсов-между-источниками)\n- [Источники](#Источники)\n\n## Команды Nginx\nОсновные команды для выполнения базовый операций во время работы Nginx.\n\n* `nginx -V` - проверить версию Nginx, его скомпилированные параметры конфигурации и установленные модули.\n* `nginx -t` - протестировать конфигурационный файл и проверить его расположение.\n* `nginx -s reload` - перезапустить конфигурационный файл без перезагрузки Nginx.\n\n[⬆ Наверх](#Содержание)\n## Блок location на PHP\nПростой шаблон для быстрой и легкой установки PHP, FPM или CGI на ваш сайт.\n```nginx\nlocation ~ \\.php$ {\n  try_files $uri =404;\n  client_max_body_size 64m;\n  client_body_buffer_size 128k;\n  include fastcgi_params;\n  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;\n  fastcgi_pass unix:/path/to/php.sock;\n}\n```\n[⬆ Наверх](#Содержание)\n## Перенаправления\n### Перенаправление на www\n[Корректный способ](http://nginx.org/en/docs/http/converting_rewrite_rules.html) определить удаленный сервер по домену без *www* и перенаправить его c *www*:\n```nginx\nserver {\n  listen 80;\n  server_name example.org;\n  return 301 $scheme://www.example.org$request_uri;\n}\n\nserver {\n  listen 80;\n  server_name www.example.org;\n}\n```\nЭто будет нормально работать для HTTPS, если используется в соответствующем блоке server{}, где идёт прослушивание 443 порта.\n[⬆ Наверх](#Содержание)\n### Перенаправление на no-www\nКорректный способ определить удаленный сервер по домену c *www* и перенаправить его без *www*:\n```nginx\nserver {\n  listen 80;\n  server_name example.org;\n}\n\nserver {\n  listen 80;\n  server_name www.example.org;\n  return 301 $scheme://example.org$request_uri;\n}\n```\nЭто будет нормально работать для HTTPS, если используется в соответствующем блоке server{}, где идёт прослушивание 443 порта.\n[⬆ Наверх](#Содержание)\n### Перенаправление на HTTPS\nСпособ для переадресации с HTTP на HTTPS:  \n```nginx\nserver {\n  listen 80;\n  return 301 https://$host$request_uri;\n}\n\nserver {\n  listen 443 ssl;\n\n  # let the browsers know that we only accept HTTPS\n  add_header Strict-Transport-Security max-age=2592000;\n}\n```\n[⬆ Наверх](#Содержание)\n### Слеш в конце адресной строки\nДанная строка добавляет слэш `/` в конце каждого URL, только в случае, если в URL нет точки или параметров. То есть после *example.com/index.php* или *example.com/do?some=123* слэш не поставится.  \n```nginx\nrewrite ^([^.\\?]*[^/])$ $1/ permanent;\n```\n[⬆ Наверх](#Содержание)\n### Перенаправление со страницы на страницу\n```nginx\nlocation = /oldpage.html {\n    return 301 http://example.org/newpage.html;\n  }\n```\n[⬆ Наверх](#Содержание)\n### Перенаправление с сайта на сайт\n```nginx\nserver {\n  server_name old-site.com;\n  return 301 $scheme://new-site.com$request_uri;\n}\n```\n[⬆ Наверх](#Содержание)\n### Перенаправление на определенный путь в URI\n```nginx\nlocation /old-site {\n  rewrite ^/old-site/(.*) http://example.org/new-site/$1 permanent;\n}\n```\n[⬆ Наверх](#Содержание)\n## Производительность\n### Кэширование\nНавсегда разрешить браузерам кэшировать статические содержимое. Nginx установит оба заголовка: Expires и Cache-Control.\n```nginx\nlocation /static {\n  root /data;\n  expires max;\n}\n```\nЗапретить кэширование браузерам (например для отслеживания запросов) можно следующим образом:\n```nginx\nlocation = /empty.gif {\n  empty_gif;\n  expires -1;\n}\n```\n[⬆ Наверх](#Содержание)\n### Gzip сжатие\n```nginx\ngzip  on;\ngzip_buffers 16 8k;\ngzip_comp_level 6;\ngzip_http_version 1.1;\ngzip_min_length 256;\ngzip_proxied any;\ngzip_vary on;\ngzip_types\n  text/xml application/xml application/atom+xml application/rss+xml application/xhtml+xml image/svg+xml\n  text/javascript application/javascript application/x-javascript\n  text/x-json application/json application/x-web-app-manifest+json\n  text/css text/plain text/x-component\n  font/opentype application/x-font-ttf application/vnd.ms-fontobject\n  image/x-icon;\ngzip_disable \"msie6\";\n```\n[⬆ Наверх](#Содержание)\n### Кэш файлов\nЕсли у вас кешируется большое количество статических файлов через Nginx, то кэширование метаданных этих файлов позволит сэкономить время задержки.\n```nginx\nopen_file_cache max=1000 inactive=20s;\nopen_file_cache_valid 30s;\nopen_file_cache_min_uses 2;\nopen_file_cache_errors on;\n```\n[⬆ Наверх](#Содержание)\n### SSL кэш\nПодключение SSL кэширования позволит возобновлять SSL сессии и сократить время к следующим обращениям к SSL/TLS протоколу.\n```nginx\nssl_session_cache shared:SSL:10m;\nssl_session_timeout 10m;\n```\n[⬆ Наверх](#Содержание)\n### Поддержка Upstream\nАктивация кеширования c использованием Upstream подключений:\n```nginx\nupstream backend {\n  server 127.0.0.1:8080;\n  keepalive 32;\n}\n\nserver {\n\n  location /api/ {\n    proxy_pass http://backend;\n    proxy_http_version 1.1;\n    proxy_set_header Connection \"\";\n  }\n}\n```\n[⬆ Наверх](#Содержание)\n### Мониторинг\nПо умолчанию [Stub Status](http://nginx.org/ru/docs/http/ngx_http_stub_status_module.html) модуль не собирается, его сборку необходимо разрешить с помощью конфигурационного параметра —with-http_stub_status_module и активировать с помощью:\n```nginx\nlocation /status {\n  stub_status on;\n  access_log off;\n}\n```\nДанная настройка позволит вам получать статус в обычном текстовом формате по общему количеству запросов и клиентским подключениям (принятым, обработанным, активным).\n\nБолее информативный статус от Nginx можно получить с помощью [Luameter](https://luameter.com/), который несколько сложнее в установке и требует наличия Nginx Lua модуля. Это предоставит следующие метрики по различным конфигурационным группам в формате JSON:\n\n* Общее количество запросов/ответов.\n* Общее количество ответов сгруппирированных по статус кодам: 1xx, 2xx, 3xx, 4xx, 5xx.\n* Общее количество байт принятых/отправленных клиенту.\n* Промежуточные отрезки времени для оценки минимума, максимума, медианы, задержек и тд.\n* Среднестатистическое количество запросов для простоты мониторинга и составления прогнозов по нагрузке.\n* [И прочее...](https://luameter.com/metrics)\n\n[Пример дашборда от Luameter](https://luameter.com/demo).\n\nТакже для сбора статистики отлично подходит [ngxtop](https://github.com/lebinh/ngxtop).\n\n[⬆ Наверх](#Содержание)\n## Безопасность\n### Активация базовой аунтификации\nДля начала вам потребуется создать пароль и сохранить его в обычной текстовом файле:\n```\nимя:пароль\n```\nЗатем установить найтройки для server/location блока, который необходимо защитить:\n```nginx\nauth_basic \"This is Protected\";\nauth_basic_user_file /path/to/password-file;\n```\n[⬆ Наверх](#Содержание)\n### Открыть только локальный доступ\n```nginx\nlocation /local {\n  allow 127.0.0.1;\n  deny all;\n}\n```\n[⬆ Наверх](#Содержание)\n### Защита SSL настроек\n* Отключить SSLv3, если он включен по умолчанию. Это предотвратит [POODLE SSL Attack](http://nginx.com/blog/nginx-poodle-ssl/).\n* Шифры, которые наилучшим образом обеспечат защиту. [Mozilla Server Side TLS and Nginx](https://wiki.mozilla.org/Security/Server_Side_TLS#Nginx).\n```nginx\n# don’t use SSLv3 ref: POODLE CVE-2014-356 - http://nginx.com/blog/nginx-poodle-ssl/\nssl_protocols  TLSv1 TLSv1.1 TLSv1.2;  \n\n# Ciphers set to best allow protection from Beast, while providing forwarding secrecy, as defined by Mozilla (Intermediate Set) - https://wiki.mozilla.org/Security/Server_Side_TLS#Nginx\nssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';\nssl_prefer_server_ciphers  on;\n```\n[⬆ Наверх](#Содержание)\n## Прочее\n### Подзапросы после завершения\nБывают ситуации, когда вам необходимо передать запрос на другой бэкэнд **в дополнении или после его обработки**. Первый случай -  отслеживать количество завершенных загрузок путем вызова API, после того как пользователь скачал файл. Второй случай  -отслеживать запрос, к которому вы бы хотели вернуться как можно быстрее (возможно с пустым .gif) и сделать соответствующие записи в фоновом режиме.  [**post_action**](http://wiki.nginx.org/HttpCoreModule#post_action), который позволяет вам определить подзапрос и будет отклонен по окончанию текущего запроса - является [лучшим решением](http://mailman.nginx.org/pipermail/nginx/2008-April/004524.html) для обоих вариантов.\n```nginx\nlocation = /empty.gif {\n  empty_gif;\n  expires -1;\n  post_action @track;\n}\n\nlocation @track {\n  internal;\n  proxy_pass http://tracking-backend;\n}\n```\n[⬆ Наверх](#Содержание)\n### Распределение ресурсов между источниками\nСамый простой и наиболее известный способ кросс-доменного запроса на ваш сервер:\n```nginx\nlocation ~* \\.(eot|ttf|woff) {\n  add_header Access-Control-Allow-Origin *;\n}\n```\n[⬆ Наверх](#Содержание)\n## Источники\n- [Nginx Official Guide](http://nginx.com/resources/admin-guide/)\n- [HTML 5 Boilerplate's Sample Nginx Configuration](https://github.com/h5bp/server-configs-nginx)\n- [Nginx Pitfalls](http://wiki.nginx.org/Pitfalls)\n- [Английский оригинал](https://github.com/lebinh/nginx-conf) от [@lebinh](https://github.com/lebinh), без дополнений.\n- [Русский оригинал](https://github.com/elasticweb/nginx-snippets) от [@elasticweb](https://github.com/elasticweb).\n\n[⬆ Наверх](#Содержание)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Finsspb%2Fnginx-config","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Finsspb%2Fnginx-config","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Finsspb%2Fnginx-config/lists"}