Ответ
Я разворачивал Nginx как из пакетных менеджеров (apt install nginx на Ubuntu), так и собирал из исходников для использования最新них версий или специфичных модулей. Вот ключевые настройки, которые я часто применяю:
1. Блокировка доступа по IP (allow/deny):
location /admin {
# Разрешаем доступ только из офисной сети
allow 10.10.0.0/16;
# Блокируем все остальные IP
deny all;
proxy_pass http://backend_app;
}
2. Редиректы:
# Перенаправление с HTTP на HTTPS
server {
listen 80;
server_name example.com;
return 301 https://$server_name$request_uri;
}
# Удаление 'www' из домена
server {
listen 443 ssl;
server_name www.example.com;
ssl_certificate /etc/ssl/certs/example.crt;
ssl_certificate_key /etc/ssl/private/example.key;
return 301 https://example.com$request_uri;
}
3. Условные директивы (if):
# Блокировка определенных user-agent
if ($http_user_agent ~* (bot|crawler|scraper)) {
return 444; # Закрытие соединения без ответа
}
# Обслуживание статики для определенного пути
location ~* .(jpg|jpeg|png|gif|ico|css|js)$ {
expires 365d;
add_header Cache-Control "public, immutable";
}
4. Базовая HTTP-авторизация:
location /staging {
auth_basic "Staging Environment";
auth_basic_user_file /etc/nginx/.htpasswd; # Файл, созданный утилитой htpasswd
proxy_pass http://staging_backend;
}
Помимо этого, я настраиваю сжатие gzip, кеширование прокси, SSL/TLS с современными шифрами, а также конфигурацию upstream для балансировки нагрузки между несколькими бэкенд-серверами.