====== Nginx - примеры ======
===== Веб-сервер =====
Nginx может отдавать статический контент с высокой скоростью.
**Пример конфигурации:**
server {
listen 80;
server_name example.com;
root /var/www/html;
location / {
index index.html;
}
}
При обращении к ''example.com'' Nginx будет отдавать файлы из ''/var/www/html''.
===== Обратный прокси (Reverse Proxy) =====
Nginx перенаправляет запросы на бэкенд-серверы (например, Node.js или Apache).
**Пример:**
server {
listen 80;
server_name api.example.com;
location / {
proxy_pass http://localhost:3000; // Перенаправляет на Node.js-сервер
proxy_set_header Host $host;
}
}
===== Балансировка нагрузки (Load Balancing) =====
Распределение запросов между несколькими серверами.
**Пример:**
upstream backend {
server 192.168.1.10:8000;
server 192.168.1.11:8000;
server 192.168.1.12:8000 backup; // Резервный сервер
}
server {
location / {
proxy_pass http://backend;
}
}
Запросы распределяются между тремя серверами по алгоритму ''round-robin''.
===== Кеширование =====
Ускорение работы сайта за счёт кеширования ответов бэкенда.
**Пример:**
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m;
server {
location / {
proxy_cache my_cache;
proxy_pass http://backend;
proxy_cache_valid 200 302 10m; // Кеширует ответы 200 и 302 на 10 минут
}
}
===== Поддержка HTTP/2 и HTTP/3 =====
Ускорение загрузки страниц за счёт современных протоколов.
**Пример:**
server {
listen 443 ssl http2; // Включает HTTP/2
listen 443 quic reuseport; // Экспериментальная поддержка HTTP/3 (QUIC)
ssl_certificate /etc/nginx/ssl/cert.pem;
ssl_certificate_key /etc/nginx/ssl/key.pem;
}
===== Защита и безопасность =====
**Ограничение доступа по IP:**
location /admin {
allow 192.168.1.100;
deny all; // Блокирует всех, кроме указанного IP
}
**Rate Limiting (защита от DDoS):**
limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
server {
location / {
limit_req zone=one burst=20; // Не более 10 запросов в секунду
}
}
===== Виртуальные хосты (Server Blocks) =====
Хостинг нескольких сайтов на одном сервере.
**Пример:**
server {
listen 80;
server_name site1.com;
root /var/www/site1;
}
server {
listen 80;
server_name site2.com;
root /var/www/site2;
}
===== WebSocket =====
Проксирование WebSocket-соединений.
**Пример:**
location /chat {
proxy_pass http://backend;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
===== Сжатие данных (Gzip/Brotli) =====
**Gzip-сжатие:**
gzip on;
gzip_types text/plain text/css application/json;
**Brotli (если модуль установлен):**
brotli on;
brotli_types text/html text/plain text/css;
===== Перезапись URL (Rewrite) =====
**Редирект с HTTP на HTTPS:**
server {
listen 80;
server_name example.com;
return 301 https://$host$request_uri;
}
**Rewrite для "красивых" URL:**
location /blog {
rewrite ^/blog/(.*)$ /index.php?page=$1 last;
}
===== Логирование =====
**Настройка access.log:**
access_log /var/log/nginx/access.log combined;
Формат ''combined'' включает IP, дату, метод запроса и User-Agent.
===== FastCGI (PHP-FPM) =====
**Обработка PHP:**
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
===== GeoIP =====
**Блокировка трафика по стране:**
geoip_country /usr/share/GeoIP/GeoIP.dat;
map $geoip_country_code $allowed_country {
default no;
US yes; // Разрешить только США
}
server {
if ($allowed_country = no) { return 403; }
}
===== Rate Limiting =====
**Ограничение скорости загрузки:**
location /download {
limit_rate 100k; // Ограничение скорости до 100 КБ/с
}
===== Поддержка IPv6 =====
**Пример:**
server {
listen [::]:80 ipv6only=on;
}
===== Модульность =====
**Пример Lua-скрипта:**
location /test {
content_by_lua_block {
ngx.say("Hello from Lua!")
}
}
===== Видеостриминг (MP4/FLV) =====
**Стриминг MP4:**
location /videos {
mp4;
mp4_buffer_size 1m;
}
===== Nginx Plus (коммерческая версия) =====
**JWT-аутентификация:**
location /secure {
auth_jwt "Restricted Area";
auth_jwt_key_file /etc/nginx/jwt_keys/secret.jwk;
}