🌐 NGINX¶
NGINX — веб-сервер, который часто используют как обратный прокси, балансировщик нагрузки или кэш статики.
Status: Draft
1. Файлы и каталоги
Типичная раскладка на Debian/Ubuntu:
| Путь | Назначение |
|---|---|
/etc/nginx/nginx.conf |
Главный конфиг (worker’ы, include) |
/etc/nginx/sites-available/ |
Виртуальные хосты (файлы сайтов) |
/etc/nginx/sites-enabled/ |
Активные сайты — обычно symlink из sites-available |
/var/log/nginx/ |
access.log, error.log |
На RHEL/CentOS чаще conf.d/*.conf вместо sites-available/enabled — смысл тот же: отдельный файл на vhost.
2. Основные директивы
| Директива | Зачем |
|---|---|
server { … } |
Один виртуальный хост |
listen |
Порт / адрес (80, 443 ssl) |
server_name |
Имя хоста |
location |
Правила по URL-пути |
root |
Корень статики |
index |
Файлы по умолчанию (index.html) |
proxy_pass |
Прокси на upstream / другой сервер |
try_files |
Отдать файл или fallback (часто на index.php / SPA) |
3. Static site
Минимальный сайт на статике.
Конфиг
/etc/nginx/sites-available/app.example.conf:
server {
listen 80;
server_name app.example www.app.example;
charset utf-8;
root /var/www/app.example;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
Включить и проверить
mkdir -p /var/www/app.example
echo '<h1>ok</h1>' > /var/www/app.example/index.html
ln -s /etc/nginx/sites-available/app.example.conf \
/etc/nginx/sites-enabled/app.example.conf
nginx -t
systemctl reload nginx
Логи: tail -f /var/log/nginx/access.log / error.log.
Кто слушает 80: ss -tlnp | grep ':80'.
4. Reverse proxy
nginx принимает запрос снаружи и отдаёт на backend (другой хост/порт/сокет).
Конфиг
Backend слушает, например, 192.168.1.101:8080:
server {
listen 80;
server_name app.example;
location / {
proxy_pass http://192.168.1.101:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Без Host / X-Forwarded-* backend часто «не понимает» исходный хост и схему (http vs https).
upstream (кратко)
Несколько backend’ов:
upstream app_backends {
server 192.168.1.101:8080;
server 192.168.1.102:8080;
}
server {
listen 80;
server_name app.example;
location / {
proxy_pass http://app_backends;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
TLS (HTTPS)
server {
listen 443 ssl;
server_name app.example;
ssl_certificate /etc/nginx/ssl/app.example.crt;
ssl_certificate_key /etc/nginx/ssl/app.example.key;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
}
}
server {
listen 80;
server_name app.example;
return 301 https://$host$request_uri;
}
Сертификаты: Let's Encrypt (certbot) или корпоративный CA. После правок — nginx -t и reload.
5. PHP-FPM (опционально)
Если нужен PHP через unix-сокет FPM.
location для .php
server {
listen 80;
server_name app.example;
root /var/www/app.example;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
Пакеты (Debian): nginx + php-fpm (версия сокета должна совпасть с установленной).
Проверка: echo '<?php phpinfo();' > /var/www/app.example/index.php.
Вопросы
В разработке..