wiki/docs/nginx/Nginx.md
ilyamak04 14df819a9e
All checks were successful
Build MkDocs / build-and-deploy (push) Successful in 20s
+
2025-03-08 12:29:25 +03:00

8.6 KiB
Raw Blame History

root vs alias

root

Добавляет URL к указанному пути.

location /images/ {
    alias /var/www/myapp/static/;
}

Если запрошен URL /images/photo.jpg, Nginx будет искать файл по пути /var/www/myapp/static/images/photo.jpg.

alias

Заменяет часть URL на указанный путь.

location /images/ {
    alias /var/www/myapp/static/;
}

Если запрошен URL /images/photo.jpg, Nginx будет искать файл по пути /var/www/myapp/static/photo.jpg.

В alias корреткно не работают регулярки

!!! tip "" Не забывай добавлять / в конце строки в директиве location

Директивы

http

Блок http используется для настройки параметров, связанных с обработкой HTTP-запросов.

server

Блок server определяет виртуальный сервер (хост). Внутри этого блока настраиваются параметры для обработки запросов к определенному домену или IP-адресу.

  • listen: Порт и IP-адрес, на котором сервер будет принимать запросы.
  • server_name: Имя сервера (домен или поддомен). server_name _: Nginx использует этот блок server как сервер по умолчанию для запросов, которые не соответствуют другим блокам server.
  • location: Блоки для обработки конкретных URL.

Разное

  • upstream: Используется для настройки балансировки нагрузки между несколькими серверами
http {
    upstream backend {
        server 192.168.1.1;
        server 192.168.1.2;
    }

    server {
        listen 80;
        server_name example.com;

        location / {
            proxy_pass http://backend;
        }
    }
}
  • include: Позволяет подключать дополнительные конфигурационные файлы
  • error_page: Настройка страниц ошибок
  • access_log и error_log: Настройка логов

Директива worker_processes определяет количество процессов (worker processes), которые Nginx будет использовать для обработки запросов. При значение auto Nginx автоматически определяет оптимальное количество worker-процессов на основе количества ядер CPU. Каждый worker-процесс может обрабатывать множество соединений (зависит от параметра worker_connections).


Блок location

  • root: Корневая директория для поиска файлов.
  • alias: Замена части URL на другой путь.
  • proxy_pass: Перенаправление запросов на другой хост.
  • try_files: Попытка найти файл по указанному пути.

access_log глобально задать нельзя. Можно переопределять на уровне http, server или location. error_log можно задать глобально. Можно переопределять на уровне http, server или location.


proxy_set_header Позволяет изменять или добавлять HTTP-заголовки, которые Nginx передаёт проксируемому серверу. Добавляет заголовок, если его нет. Перезаписывает, если он уже есть.

proxy_pass_header Позволяет передавать заголовки от backend клиенту

# Передаёт backend-серверу доменное имя хоста из запроса клиента
proxy_set_header Host $host;
# Передаёт backend-серверу ip-адрес клиента
proxy_set_header X-Real-IP $remote_addr;
# Передаёт цепочку прокси-серверов, через которые прошёл запрос и добавляет в конец реальный ip-адрес клиента
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# Передаёт backend-серверу протокол, который использовал клиент (например, http или https)
proxy_set_header X-Forwarded-Proto $scheme;

Проксирование

Когда Nginx получает запрос от клиента, он не изменяет заголовки по умолчанию. Однако, если Nginx выступает в роли прокси (используется proxy_pass), он может изменить или удалить некоторые заголовки.

При проксировании Nginx передаёт следующие заголовки:

  • Host - По умолчанию Nginx передаёт заголовок Host из запроса клиента, но если используется proxy_pass, Nginx может заменить Host на IP-адрес backend-сервера, если не указано иное.
  • Connection - Nginx автоматически добавляет или изменяет заголовок Connection для управления keepalive-соединениями (значение заголовка: keep-alive, close)
  • X-Real-IP
  • X-Forwarded-For
  • X-Forwarded-Proto

Nginx автоматически добавляет заголовки X-Forwarded-For, X-Real-IP и X-Forwarded-Proto, если они не указаны явно.

Остальные заголовки не передаются, если не указаны явно с помощью proxy_set_header.

Переменные в Nginx

  • $host - доменное имя сервера и порт (если указан), содержит значение заголовка Host из запроса клиента
  • $content_type - значение заголовка Content-Type из запроса клиента
  • $content_length - значение заголовка Content-Length из запроса клиента
  • $remote_addr - ip-адрес клиента, который сделал запрос
  • $scheme - протокол запроса
  • $request_method - http метод запроса
  • $request_uri - полный URL запроса
  • $uri - URL без параметров
  • $args - параметры запроса, часть после ?
  • $cookie_* - переменные для доступа к кукам, из запроса клиента.
  • $http_* - переменные для доступа к любым HTTP-заголовкам, из запроса клиента.
    • $http_user_agent — заголовок User-Agent.
    • $http_referer — заголовок Referer.
  • $server_name - значение, указанное в директиве server_name в конфигурации Nginx
  • $server_port - порт на который пришел запрос
  • $status - http статус ответа
  • $upstream_* - содержат информацию о взаимодействии Nginx с backend-серверами (upstream)
    • $upstream_addr - IP-адрес и порт backend-сервера, который обработал запрос
    • $upstream_status - HTTP-статус ответа от backend-сервера
    • $upstream_response_time - Время, которое backend-сервер потратил на обработку запроса (в секундах)
    • $upstream_header_* - Заголовки, полученные от backend-сервера.

Уровни логирования

  1. debug: Отладочные сообщения (самый подробный уровень).
  2. info: Информационные сообщения.
  3. notice: Важные, но не критические события.
  4. warn: Предупреждения.
  5. error: Ошибки (например, проблемы с конфигурацией).
  6. crit: Критические ошибки.
  7. alert: Ещё более критические ошибки.
  8. emerg: Аварийные ситуации (Nginx не работает).