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

159 lines
8.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

### 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 не работает).