Инструменты пользователя

Инструменты сайта


linux:nginx

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
linux:nginx [2024/07/10 02:03]
admin
linux:nginx [2024/12/29 06:31] (текущий)
admin
Строка 2: Строка 2:
  
 ===== Сведения ===== ===== Сведения =====
 +
 +<details>
 +<summary>:!: Общее</summary>
 Эффективное использование ресурсов, отзывчив под нагрузкой.\\ Эффективное использование ресурсов, отзывчив под нагрузкой.\\
 Используется как веб так и прокси сервер.\\ Используется как веб так и прокси сервер.\\
Строка 7: Строка 10:
  
  
-=== Динамический контент ===+**Динамический контент**\\
 Nginx не имеет возможности самостоятельно обрабатывать запросы к динамическому контенту (например php), для этого он передает запрос внешнему процессу (например [[:linux:php|php-fpm]]) и ожидает результата. \\ Nginx не имеет возможности самостоятельно обрабатывать запросы к динамическому контенту (например php), для этого он передает запрос внешнему процессу (например [[:linux:php|php-fpm]]) и ожидает результата. \\
 На каждый запрос создается отдельное соединение с процессом. (плюс в экономии на статических запросах).\\ На каждый запрос создается отдельное соединение с процессом. (плюс в экономии на статических запросах).\\
Строка 13: Строка 16:
  
  
-=== Интерпретация запросов ===+**Интерпретация запросов**\\
 В отличии от сервера [[:linux:apache|Apache]], Nginx интерпретирует запросы в первую очередь как URL а не как пути в файловой системе.\\ В отличии от сервера [[:linux:apache|Apache]], Nginx интерпретирует запросы в первую очередь как URL а не как пути в файловой системе.\\
 Во многом из-за своего Альтер Эго в роли прокси сервера, из-за чего и не реализует поддержку файлов .thaccess. Во многом из-за своего Альтер Эго в роли прокси сервера, из-за чего и не реализует поддержку файлов .thaccess.
  
  
-=== Модули ===+**Модули**\\
 В отличии от [[:linux:apache|Apache]], в Nginx модули не являются динамическими, а должны компилироваться с ядром сервера. В отличии от [[:linux:apache|Apache]], в Nginx модули не являются динамическими, а должны компилироваться с ядром сервера.
  
  
-=== Совместное использование с Apache ===+**Совместное использование с Apache**\\
 Очень частая практика использования обоих серверов вместе, Nginx ставится в качестве реверс-прокси, т.е. фронтенд а [[:linux:apache|Apache]] бэкенд.\\ Очень частая практика использования обоих серверов вместе, Nginx ставится в качестве реверс-прокси, т.е. фронтенд а [[:linux:apache|Apache]] бэкенд.\\
 Nginx самостоятельно обслуживает статический контент а динамический передает [[:linux:apache|Apache]].\\ Nginx самостоятельно обслуживает статический контент а динамический передает [[:linux:apache|Apache]].\\
 в такой конфигурации можно ставить несколько бэкендов, таким образом хорошо масштабировать систему. в такой конфигурации можно ставить несколько бэкендов, таким образом хорошо масштабировать систему.
 +</details>
  
  
Строка 126: Строка 130:
 } }
 </code> </code>
- 
- 
-==== Настройка SSL сертификата ==== 
-FIXME☝ 
  
  
Строка 157: Строка 157:
 server { server {
     listen 80;     listen 80;
-    server_name zabbix.domain.ru;+    server_name zabbix.mydomain.ru;
     root /usr/share/nginx/html;     root /usr/share/nginx/html;
     index index.html index.htm;     index index.html index.htm;
Строка 172: Строка 172:
 server { server {
  listen 443 ssl http2;  listen 443 ssl http2;
- server_name zabbix.ai.netsrv.pw;+ server_name zabbix.mydomain.ru;
  root /usr/share/nginx/html;  root /usr/share/nginx/html;
  index index.html index.htm;  index index.html index.htm;
  
  ssl on;  ssl on;
- ssl_certificate     /tank/secure/zabbix/zabbix_ssl/ZabbixExt.crt; + ssl_certificate     /etc/zabbix/zabbix_ssl/Zabbix.crt; 
- ssl_certificate_key /tank/secure/zabbix/zabbix_ssl/ZabbixExt.key;+ ssl_certificate_key /etc/zabbix/zabbix_ssl/Zabbix.key;
  
  location / {  location / {
Строка 266: Строка 266:
 </code> </code>
 Тут стоит уделить внимание расположению в сети общих ресурсов этих серверов, таких как DB, FTP и пр.\\ Тут стоит уделить внимание расположению в сети общих ресурсов этих серверов, таких как DB, FTP и пр.\\
 +
 +
 +==== Context (блоки) ====
 +Конфиг содержит древовидную структуру, определен наборами фигурных скобок, эти области называются контекстами. Контексты вкладываются друг в друга, заданные директивы наследуют вложенными контекстами, могут переопределяться\\
 +
 +<details>
 +<summary>:!: Основные директивы</summary>
 +
 +**Main**\\
 +Контекст **Main** базовый, глобальный, по умолчанию присутствует всегда, директива вне контекстов, содержится в контексте main\\
 +
 +
 +**Events**\\
 +Находится в main, определяет глобальные параметры, влияющие на то как Nginx обрабатывает соединения. В конфете может быть только один контекст Events\\
 +Как правило метод для обработки соединения выбирается автоматически, платформа выбирает наиболее эффективный из доступных\\
 +
 +
 +**Http**\\
 +Содержит все директивы и другие контексты, необходимые для обработки соединений HTTP или HTTPS\\
 +Так же является дочерним от main, одноранговые с events, не вкладываются друг в друга\\
 +
 +Содержит значения по умолчанию для каждого виртуального сервера, определенного внутри\\
 +
 +
 +**Server**\\
 +Обычно объявляется внутри http, может быть объявлен несколько раз. Виртуальный хост, набор параметров для обработки запросов, разные хосты для разных запросов например\\
 +
 +Главные директивы для выбора вирт хоста:
 +  * "listen" - комбинация ip и порта, которую прослушивает данный блок
 +  * "server_name" - так же используется для выбора, если есть несколько блоков в одинаковыми "listen" то будет проверяться заголовок запроса "Host" и на основании этого делаться выбор
 +
 +
 +**Location**\\
 +Выбирается исходя из клиентского запроса, алгоритмом сопоставления\\
 +Так же, их может быть несколько, могут быть вложены друг в друга (что тоже может быть полезно). Определение находится в строке заголовка\\ 
 +
 +Блоки "location" дополнительно делят обработку запросов внутри блока "server", на основании "url" запроса\\
 +
 +
 +**upstream**\\
 +Используется для определения пула серверов для проксирования. Находится в блоке "http" (только ли ?)\\
 +
 +Затем контекст "Upstream" может ссылаться на имя в пределах блоков "server" или "location" для передачи запросов определенного типа в пул серверов. Внутри пула используется выбор хоста (round-robin), таким образом происходит балансировка нагрузки\\
 +
 +
 +**Другие**\\
 +**if** \\
 +Позволяет настроить условное ветвление\\
 +
 +**limit_exept** \\
 +Позволяет задать ограничения на использование HTTP-методов, можно разрешать определенным адресам например\\
 +
 +</details>
  
  
Строка 312: Строка 365:
 === Журнал доступа === === Журнал доступа ===
 В журнал доступа (**access_log**) регистрирует каждый запрос клиента.\\ В журнал доступа (**access_log**) регистрирует каждый запрос клиента.\\
 +<details>
 +<summary>:!: </summary>
 <code bash> <code bash>
 http  http 
Строка 324: Строка 379:
 } }
 </code> </code>
 +
 +Перенаправление логов в stdout\\
 +"AccessLog" обычно в хосте, errors в общем блоке\\
 +Даже при такой конфигурации, error почему то все равно создает файл в "/var/log/nginx", потому что при запуске используется дефолтный, иначе как сообщить если ошибка в конфигурации\\
 +<code bash>
 +(...)
 +error_log /dev/stdout error;
 +
 +    http {
 +      server {
 +        access_log /dev/stdout;
 +        (...)
 +      }
 +    }
 +</code>
 +</details>
 +
  
 Если формат не указан явно, используется формат по умолчанию: Если формат не указан явно, используется формат по умолчанию:
Строка 334: Строка 406:
 Журнал можно отключить: Журнал можно отключить:
 <code bash>access_log  off;</code> <code bash>access_log  off;</code>
 +
  
  
Строка 347: Строка 420:
   * **alert** – Оповещения. Действие должно быть принято немедленно.   * **alert** – Оповещения. Действие должно быть принято немедленно.
   * **emerg** – Чрезвычайная ситуация. Система находится в нерабочем состоянии.   * **emerg** – Чрезвычайная ситуация. Система находится в нерабочем состоянии.
 +
 +
 +
 +==== Параметры ====
 +
 +<details>
 +<summary>:!: Перечень</summary>
 +
 +**worker_processes** - 
 +
 +**worker_connections** - 
 +
 +**worker_cpu_affinity** - 
 +
 +**** - 
 +
 +
 +</details>
 +
 +
 +
 +
 +===== Примеры =====
 +
 +<details>
 +<summary>:!: Docker minimal</summary>
 +Dockerfile
 +<code bash>
 +FROM nginx
 +COPY index.html /usr/share/nginx/html/
 +COPY default.conf /etc/nginx/conf.d/
 +</code>
 +
 +
 +Штатный конфиг nginx (из контейнера, основной)
 +<code bash>
 +user  nginx;
 +worker_processes  auto;
 +
 +error_log  /var/log/nginx/error.log notice;
 +pid        /var/run/nginx.pid;
 +
 +
 +events {
 +    worker_connections  1024;
 +}
 +
 +
 +http {
 +    include       /etc/nginx/mime.types;
 +    default_type  application/octet-stream;
 +
 +    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
 +                      '$status $body_bytes_sent "$http_referer" '
 +                      '"$http_user_agent" "$http_x_forwarded_for"';
 +
 +    access_log  /var/log/nginx/access.log  main;
 +
 +    sendfile        on;
 +    #tcp_nopush     on;
 +
 +    keepalive_timeout  65;
 +
 +    #gzip  on;
 +
 +    include /etc/nginx/conf.d/*.conf;
 +}
 +</code>
 +
 +
 +Штатный конфиг в подключаемой папке (conf.d) 
 +<code bash>
 +server {
 +    listen       80;
 +    listen  [::]:80;
 +    server_name  localhost;
 +
 +    #access_log  /var/log/nginx/host.access.log  main;
 +
 +    location / {
 +        root   /usr/share/nginx/html;
 +        index  index.html index.htm;
 +    }
 +
 +    #error_page  404              /404.html;
 +
 +    # redirect server error pages to the static page /50x.html
 +    #
 +    error_page   500 502 503 504  /50x.html;
 +    location = /50x.html {
 +        root   /usr/share/nginx/html;
 +    }
 +
 +    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
 +    #
 +    #location ~ \.php$ {
 +    #    proxy_pass   http://127.0.0.1;
 +    #}
 +
 +    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
 +    #
 +    #location ~ \.php$ {
 +    #    root           html;
 +    #    fastcgi_pass   127.0.0.1:9000;
 +    #    fastcgi_index  index.php;
 +    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
 +    #    include        fastcgi_params;
 +    #}
 +
 +    # deny access to .htaccess files, if Apache's document root
 +    # concurs with nginx's one
 +    #
 +    #location ~ /\.ht {
 +    #    deny  all;
 +    #}
 +}
 +</code>
 +
 +
 +SSL конфиг
 +<code bash>
 +server{
 +        listen 443 ssl;
 +        server_name my-super-host;
 +
 +        ssl_certificate /etc/nginx/certs/test.pem;
 +        ssl_certificate_key /etc/nginx/certs/test.key;
 +
 +        location / {
 +                root /usr/share/nginx/html;
 +                index index.html;
 +        }
 +
 +        location = /50x.html {
 +                root   /usr/share/nginx/html;
 +        }
 +}
 +
 +</code>
 +
 +
 +Генерация самоподписанного серта
 +<code bash>
 +openssl req -x509 -newkey rsa:4096 -nodes -sha256 -keyout /etc/ssl/private/ssl-cert-snakeoil.key -out /etc/ssl/certs/ssl-cert-snakeoil.pem -days 3650 -subj "/CN=<$PUBLIC_IP_ADDRESS>"
 +</code>
 +
 +</details>
 +
 +
 +
 +<details>
 +<summary>:!: Расположение tmp</summary>
 +
 +<code bash>
 +    http {
 +      server {
 +        (...)
 +        client_body_temp_path /deployments/nginx/tmp;
 +        proxy_temp_path /deployments/nginx/tmp;
 +        fastcgi_temp_path /deployments/nginx/tmp;
 +        uwsgi_temp_path /deployments/nginx/tmp;
 +        scgi_temp_path /deployments/nginx/tmp;
 +      }
 +    }
 +</code>
 +</details>
 +
 +
 +<details>
 +<summary>:!: </summary>
 +
 +<code bash>
 +</code>
 +</details>
 +
 +
 +
 +
 +
  
  
  
linux/nginx.1720576982.txt.gz · Последнее изменение: 2024/07/10 02:03 — admin