🟩 Nginx
Конфигурация: server, location, прокси, HTTPS, балансировка, кэш и частые команды.
Шпаргалки · Администрирование · #nginx #webserver #proxy #linux
Команды
sudo nginx -t # проверить конфиг
sudo nginx -s reload # применить без остановки
sudo systemctl restart|status nginx
nginx -T # показать полный конфиг
tail -f /var/log/nginx/error.log
Файлы: /etc/nginx/nginx.conf, sites-available/ и sites-enabled/ (Debian), conf.d/*.conf (RHEL).
Статический сайт
server {
listen 80;
server_name example.com www.example.com;
root /var/www/html;
index index.html;
location / {
try_files $uri $uri/ =404;
}
location ~* \.(css|js|png|jpg|svg)$ {
expires 30d;
add_header Cache-Control "public";
}
}
Реверс-прокси
location /api/ {
proxy_pass http://127.0.0.1:3000/;
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_read_timeout 60s;
}
WebSocket: добавьте proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade";.
SPA (React, Vue)
location / { try_files $uri /index.html; }
HTTPS и редирект
server {
listen 80;
server_name example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
}
Сертификат: sudo certbot --nginx -d example.com.
Балансировка
upstream app {
least_conn; # по умолчанию round-robin; ip_hash
server 10.0.0.11:8080 weight=2;
server 10.0.0.12:8080;
server 10.0.0.13:8080 backup;
}
server { location / { proxy_pass http://app; } }
Сжатие, лимиты, безопасность
gzip on; gzip_types text/css application/javascript application/json;
client_max_body_size 20m;
limit_req_zone $binary_remote_addr zone=api:10m rate=10r/s;
location /login { limit_req zone=api burst=20 nodelay; }
server_tokens off;
add_header X-Content-Type-Options nosniff always;
Кэш прокси
proxy_cache_path /var/cache/nginx keys_zone=cache:10m max_size=1g inactive=60m;
location / { proxy_cache cache; proxy_cache_valid 200 10m; proxy_pass http://app; }
Порядок выбора location
Точное = /path → самый длинный префикс с ^~ → регулярные ~ и ~* по порядку → самый длинный обычный префикс.
Частые ошибки
502 Bad Gateway (апстрим не отвечает), 413 (мал client_max_body_size), 404 на SPA (нет try_files), права на папку (пользователь www-data / nginx не читает файлы).