Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
linux:nginx [2024/07/10 02:04] admin [Прокси] |
linux:nginx [2024/12/29 06:31] (текущий) admin |
||
---|---|---|---|
Строка 2: | Строка 2: | ||
===== Сведения ===== | ===== Сведения ===== | ||
+ | |||
+ | < | ||
+ | < | ||
Эффективное использование ресурсов, | Эффективное использование ресурсов, | ||
Используется как веб так и прокси сервер.\\ | Используется как веб так и прокси сервер.\\ | ||
Строка 7: | Строка 10: | ||
- | === Динамический контент | + | **Динамический контент**\\ |
Nginx не имеет возможности самостоятельно обрабатывать запросы к динамическому контенту (например php), для этого он передает запрос внешнему процессу (например [[: | Nginx не имеет возможности самостоятельно обрабатывать запросы к динамическому контенту (например php), для этого он передает запрос внешнему процессу (например [[: | ||
На каждый запрос создается отдельное соединение с процессом. (плюс в экономии на статических запросах).\\ | На каждый запрос создается отдельное соединение с процессом. (плюс в экономии на статических запросах).\\ | ||
Строка 13: | Строка 16: | ||
- | === Интерпретация запросов | + | **Интерпретация запросов**\\ |
В отличии от сервера [[: | В отличии от сервера [[: | ||
Во многом из-за своего Альтер Эго в роли прокси сервера, | Во многом из-за своего Альтер Эго в роли прокси сервера, | ||
- | === Модули | + | **Модули**\\ |
В отличии от [[: | В отличии от [[: | ||
- | === Совместное использование с Apache | + | **Совместное использование с Apache**\\ |
Очень частая практика использования обоих серверов вместе, | Очень частая практика использования обоих серверов вместе, | ||
Nginx самостоятельно обслуживает статический контент а динамический передает [[: | Nginx самостоятельно обслуживает статический контент а динамический передает [[: | ||
в такой конфигурации можно ставить несколько бэкендов, | в такой конфигурации можно ставить несколько бэкендов, | ||
+ | </ | ||
Строка 126: | Строка 130: | ||
} | } | ||
</ | </ | ||
- | |||
- | |||
- | ==== Настройка SSL сертификата ==== | ||
- | FIXME☝ | ||
Строка 266: | Строка 266: | ||
</ | </ | ||
Тут стоит уделить внимание расположению в сети общих ресурсов этих серверов, | Тут стоит уделить внимание расположению в сети общих ресурсов этих серверов, | ||
+ | |||
+ | |||
+ | ==== Context (блоки) ==== | ||
+ | Конфиг содержит древовидную структуру, | ||
+ | |||
+ | < | ||
+ | < | ||
+ | |||
+ | **Main**\\ | ||
+ | Контекст **Main** базовый, | ||
+ | |||
+ | |||
+ | **Events**\\ | ||
+ | Находится в main, определяет глобальные параметры, | ||
+ | Как правило метод для обработки соединения выбирается автоматически, | ||
+ | |||
+ | |||
+ | **Http**\\ | ||
+ | Содержит все директивы и другие контексты, | ||
+ | Так же является дочерним от main, одноранговые с events, не вкладываются друг в друга\\ | ||
+ | |||
+ | Содержит значения по умолчанию для каждого виртуального сервера, | ||
+ | |||
+ | |||
+ | **Server**\\ | ||
+ | Обычно объявляется внутри http, может быть объявлен несколько раз. Виртуальный хост, набор параметров для обработки запросов, | ||
+ | |||
+ | Главные директивы для выбора вирт хоста: | ||
+ | * " | ||
+ | * " | ||
+ | |||
+ | |||
+ | **Location**\\ | ||
+ | Выбирается исходя из клиентского запроса, | ||
+ | Так же, их может быть несколько, | ||
+ | |||
+ | Блоки " | ||
+ | |||
+ | |||
+ | **upstream**\\ | ||
+ | Используется для определения пула серверов для проксирования. Находится в блоке " | ||
+ | |||
+ | Затем контекст " | ||
+ | |||
+ | |||
+ | **Другие**\\ | ||
+ | **if** \\ | ||
+ | Позволяет настроить условное ветвление\\ | ||
+ | |||
+ | **limit_exept** \\ | ||
+ | Позволяет задать ограничения на использование HTTP-методов, | ||
+ | |||
+ | </ | ||
Строка 312: | Строка 365: | ||
=== Журнал доступа === | === Журнал доступа === | ||
В журнал доступа (**access_log**) регистрирует каждый запрос клиента.\\ | В журнал доступа (**access_log**) регистрирует каждый запрос клиента.\\ | ||
+ | < | ||
+ | < | ||
<code bash> | <code bash> | ||
http | http | ||
Строка 324: | Строка 379: | ||
} | } | ||
</ | </ | ||
+ | |||
+ | Перенаправление логов в stdout\\ | ||
+ | " | ||
+ | Даже при такой конфигурации, | ||
+ | <code bash> | ||
+ | (...) | ||
+ | error_log /dev/stdout error; | ||
+ | |||
+ | http { | ||
+ | server { | ||
+ | access_log / | ||
+ | (...) | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | </ | ||
+ | |||
Если формат не указан явно, используется формат по умолчанию: | Если формат не указан явно, используется формат по умолчанию: | ||
Строка 334: | Строка 406: | ||
Журнал можно отключить: | Журнал можно отключить: | ||
<code bash> | <code bash> | ||
+ | |||
Строка 347: | Строка 420: | ||
* **alert** – Оповещения. Действие должно быть принято немедленно. | * **alert** – Оповещения. Действие должно быть принято немедленно. | ||
* **emerg** – Чрезвычайная ситуация. Система находится в нерабочем состоянии. | * **emerg** – Чрезвычайная ситуация. Система находится в нерабочем состоянии. | ||
+ | |||
+ | |||
+ | |||
+ | ==== Параметры ==== | ||
+ | |||
+ | < | ||
+ | < | ||
+ | |||
+ | **worker_processes** - | ||
+ | |||
+ | **worker_connections** - | ||
+ | |||
+ | **worker_cpu_affinity** - | ||
+ | |||
+ | **** - | ||
+ | |||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ===== Примеры ===== | ||
+ | |||
+ | < | ||
+ | < | ||
+ | Dockerfile | ||
+ | <code bash> | ||
+ | FROM nginx | ||
+ | COPY index.html / | ||
+ | COPY default.conf / | ||
+ | </ | ||
+ | |||
+ | |||
+ | Штатный конфиг nginx (из контейнера, | ||
+ | <code bash> | ||
+ | user nginx; | ||
+ | worker_processes | ||
+ | |||
+ | error_log | ||
+ | pid / | ||
+ | |||
+ | |||
+ | events { | ||
+ | worker_connections | ||
+ | } | ||
+ | |||
+ | |||
+ | http { | ||
+ | include | ||
+ | default_type | ||
+ | |||
+ | log_format | ||
+ | ' | ||
+ | '" | ||
+ | |||
+ | access_log | ||
+ | |||
+ | sendfile | ||
+ | # | ||
+ | |||
+ | keepalive_timeout | ||
+ | |||
+ | #gzip on; | ||
+ | |||
+ | include / | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | |||
+ | Штатный конфиг в подключаемой папке (conf.d) | ||
+ | <code bash> | ||
+ | server { | ||
+ | listen | ||
+ | listen | ||
+ | server_name | ||
+ | |||
+ | # | ||
+ | |||
+ | location / { | ||
+ | root / | ||
+ | index index.html index.htm; | ||
+ | } | ||
+ | |||
+ | # | ||
+ | |||
+ | # redirect server error pages to the static page /50x.html | ||
+ | # | ||
+ | error_page | ||
+ | location = /50x.html { | ||
+ | root / | ||
+ | } | ||
+ | |||
+ | # proxy the PHP scripts to Apache listening on 127.0.0.1: | ||
+ | # | ||
+ | #location ~ \.php$ { | ||
+ | # proxy_pass | ||
+ | #} | ||
+ | |||
+ | # pass the PHP scripts to FastCGI server listening on 127.0.0.1: | ||
+ | # | ||
+ | #location ~ \.php$ { | ||
+ | # root html; | ||
+ | # fastcgi_pass | ||
+ | # fastcgi_index | ||
+ | # fastcgi_param | ||
+ | # include | ||
+ | #} | ||
+ | |||
+ | # deny access to .htaccess files, if Apache' | ||
+ | # concurs with nginx' | ||
+ | # | ||
+ | #location ~ /\.ht { | ||
+ | # deny all; | ||
+ | #} | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | |||
+ | SSL конфиг | ||
+ | <code bash> | ||
+ | server{ | ||
+ | listen 443 ssl; | ||
+ | server_name my-super-host; | ||
+ | |||
+ | ssl_certificate / | ||
+ | ssl_certificate_key / | ||
+ | |||
+ | location / { | ||
+ | root / | ||
+ | index index.html; | ||
+ | } | ||
+ | |||
+ | location = /50x.html { | ||
+ | root / | ||
+ | } | ||
+ | } | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | Генерация самоподписанного серта | ||
+ | <code bash> | ||
+ | openssl req -x509 -newkey rsa:4096 -nodes -sha256 -keyout / | ||
+ | </ | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | < | ||
+ | < | ||
+ | |||
+ | <code bash> | ||
+ | http { | ||
+ | server { | ||
+ | (...) | ||
+ | client_body_temp_path / | ||
+ | proxy_temp_path / | ||
+ | fastcgi_temp_path / | ||
+ | uwsgi_temp_path / | ||
+ | scgi_temp_path / | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | |||
+ | < | ||
+ | < | ||
+ | |||
+ | <code bash> | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||