Как разворачивал и настраивал Nginx (allow/deny, редиректы, условия, авторизация)

«Как разворачивал и настраивал Nginx (allow/deny, редиректы, условия, авторизация)» — вопрос из категории Веб-серверы и балансировка, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Я разворачивал 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 для балансировки нагрузки между несколькими бэкенд-серверами.