====== 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; } ===== Реверс прокси с веб сокетом ===== server { listen 8000 ssl; server_name example.com; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # Опционально: улучшенные настройки SSL ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256'; ssl_prefer_server_ciphers on; location / { proxy_pass http://192.168.0.2:8001; 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; # Исправляем ссылки в ответах бэкенда proxy_redirect http://192.168.0.2:8001/ https://example.com:8000/; } # Отдельный блок для WebSocket (/ws) location /ws { proxy_pass http://192.168.0.2:8001/ws; # Обязательные настройки для WebSocket proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; 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_read_timeout 86400s; # Долгий таймаут для WS proxy_send_timeout 86400s; } }