====== 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; }