В современном цифровом ландшафте веб-серверы играют решающую роль в доставке контента пользователям. Однако по мере увеличения трафика и сложности становится необходимым оптимизировать производительность сервера и усилить меры безопасности. Вот где на сцену выходит обратный прокси-сервер Nginx. Выступая в качестве посредника между клиентами и внутренними серверами, обратный прокси-сервер Nginx предлагает многочисленные преимущества для вашей веб-инфраструктуры.

В этой статье мы проведем вас через процесс настройки Nginx в качестве обратного прокси-сервера для повышения производительности и безопасности инфраструктуры вашего веб-сервера. Обратный прокси-сервер выступает в качестве посредника между клиентами и внутренними серверами, перенаправляя клиентские запросы и возвращая ответы. Реализовав Nginx в качестве обратного прокси-сервера, вы сможете добиться балансировки нагрузки, кэширования, завершения SSL/TLS и многого другого. Давайте углубимся в этапы настройки!

Что такое обратный прокси?

Обратный прокси-сервер — это сервер, который находится между клиентскими устройствами и бэкенд-серверами, перенаправляя клиентские запросы на соответствующий сервер и возвращая ответы клиентам. В отличие от традиционного прямого прокси-сервера, который обрабатывает клиентские запросы от их имени, обратный прокси-сервер работает от имени сервера. Он получает клиентские запросы и действует как шлюз к одному или нескольким бэкенд-серверам, распределяя нагрузку и предоставляя дополнительные функции.

Предпосылки

Прежде чем приступить к настройке, убедитесь, что у вас есть следующее:

  • Сервер под управлением Nginx (установленный и правильно настроенный)
  • Внутренние серверы, на которые Nginx будет перенаправлять запросы

Шаг 1: Установка Nginx

Если вы еще не установили Nginx, выполните следующие действия, чтобы установить его на свой сервер:

  1. Обновите менеджер пакетов: sudo apt update
  2. Установите Nginx:  sudo apt install nginx
  3. Запустите Nginx: sudo systemctl start nginx
  4. Включите запуск Nginx при загрузке: sudo systemctl enable nginx

Чтобы установить Nginx на компьютере с Windows, следуйте инструкциям, описанным в нашей статье Установка Nginx на Windows.

Шаг 2: Настройка внутренних серверов

Далее вам необходимо настроить внутренние серверы, на которые Nginx будет пересылать запросы.

Вот пример конфигурации:

http {
    upstream backend_servers {
        server backend1.example.com;
        server backend2.example.com;
        server backend3.example.com;
    }

    ...
}

В приведенной выше конфигурации замените backend1.example.com, backend2.example.com, и backend3.example.com фактическими адресами или доменными именами ваших внутренних серверов.

Шаг 3: Настройте Nginx как обратный прокси-сервер

Теперь давайте настроим Nginx как обратный прокси-сервер, изменив файл конфигурации Nginx.

http {
    ...

    server {
        listen 80;
        server_name example.com;

        location / {
            proxy_pass http://backend_servers;
        }
    }
}

В приведенной выше конфигурации замените example.com на свое доменное имя или IP-адрес. Директива proxy_pass указывает, что Nginx должен пересылать запросы на backend_servers, определенный в предыдущем шаге.

Шаг 4: Тестирование и проверка

После внесения необходимых изменений в конфигурацию, важно протестировать и проверить настройку обратного прокси-сервера Nginx. Вот что вы можете сделать:

  1. Перезапустите Nginx, чтобы изменения конфигурации вступили в силу: sudo systemctl restart nginx
  2. Получите доступ к своему домену или IP-адресу в веб-браузере.
  3. Контролируйте внутренние серверы, чтобы убедиться, что запросы передаются правильно.

Шаг 5: Дополнительные параметры конфигурации

Поздравляем! Вы успешно настроили Nginx как обратный прокси. Однако, в зависимости от ваших конкретных требований, вы можете захотеть изучить дополнительные параметры конфигурации. Вот несколько примеров:

Балансировка нагрузки с помощью обратного прокси-сервера Nginx

Одним из ключевых преимуществ использования Nginx в качестве обратного прокси-сервера является его надежная балансировка нагрузки. С помощью Nginx вы можете распределять входящие клиентские запросы по нескольким внутренним серверам, эффективно распределяя рабочую нагрузку и предотвращая перегрузку любого отдельного сервера. Вот пример того, как можно настроить Nginx в качестве обратного прокси-сервера для балансировки нагрузки:

http {
    upstream backend_servers {    
        server backend1.example.com;
        server backend2.example.com;
        server backend3.example.com;  
    }  
    server {
        listen 80;    
        server_name example.com;
        location / {      
            proxy_pass http://backend_servers;
        }
    }
}

В приведенном выше примере мы определяем блок upstream, который перечисляет бэкенд-серверы. Затем Nginx прослушивает порт 80 и перенаправляет входящие запросы на бэкенд-серверы, определенные в блоке backend_servers. Это гарантирует равномерное распределение нагрузки между серверами, что повышает производительность и надежность.

Кэширование для повышения производительности

Еще одна мощная функция обратного прокси-сервера Nginx — кэширование. Кэшируя часто используемые ресурсы, Nginx может значительно снизить нагрузку на внутренние серверы и улучшить время отклика для клиентов. Давайте рассмотрим пример, в котором мы настраиваем Nginx для кэширования статических ресурсов:

http {
    ...

    server {
        ...

        location /static {
            proxy_pass http://backend_servers;
            proxy_cache my_cache;
            proxy_cache_valid 200 1d;
            proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
        }
    }
}

В приведенной выше конфигурации Nginx получает указание кэшировать ресурсы по URL-пути /static. Директива proxy_cache включает кэширование с использованием указанной зоны кэша (например, my_cache). Директива proxy_cache_valid устанавливает период действия кэша (например, 1 день), а также proxy_cache_use_stale определяет, какие ответы об ошибках должны обслуживаться из кэша.

Прекращение SSL/TLS

Обратный прокси-сервер Nginx также действует как мощная точка завершения SSL/TLS, разгружая процессы шифрования и дешифрования SSL/TLS с внутренних серверов. Это позволяет внутренним серверам сосредоточиться на обслуживании контента, а не на обработке криптографических операций. Вот пример конфигурации завершения SSL/TLS в Nginx:

http {
    ...

    server {
    ...

        listen 443 ssl;

        ssl_certificate /path/to/certificate.crt;
        ssl_certificate_key /path/to/private_key.key;

        location / {
            proxy_pass http://backend_servers;
        }
    }
}

В этом примере Nginx прослушивает порт 443 с параметром ssl, указывающим, что он должен обрабатывать трафик SSL/TLS. Директива ssl_certificate указывает путь к файлу сертификата SSL и ssl_certificate_key указывает на файл закрытого ключа. Входящие зашифрованные запросы расшифровываются Nginx, а затем запросы в виде открытого текста пересылаются на внутренние серверы.

Контроль доступа и безопасность

Обратный прокси-сервер Nginx предлагает механизмы контроля доступа, которые помогают защитить внутренние серверы от несанкционированного доступа. Определяя правила и ограничения, вы можете контролировать, кто может получить доступ к вашим внутренним ресурсам. Вот пример конфигурации, которая ограничивает доступ определенным IP-адресам:

http {
    ...

    server {
        ...

        location / {
            allow 192.168.1.0/24;
            deny all;
            proxy_pass http://backend_servers;
        }
    }
}

В приведенном выше примере директива allow указывает IP-адреса или диапазоны CIDR, которым разрешен доступ к внутренним серверам. В этом случае разрешены только IP-адреса в диапазоне 192.168.1.0/24, а все остальные запросы отклоняются. Это добавляет дополнительный уровень безопасности, ограничивая доступ к доверенным источникам.

Высокая доступность с отказоустойчивостью

Обратный прокси-сервер Nginx также можно настроить для сценариев высокой доступности и отказоустойчивости. Мониторинг внутренних серверов и автоматическое перенаправление трафика при сбое сервера позволяют обеспечить бесперебойное обслуживание пользователей.

Вот пример конфигурации для отказоустойчивости в Nginx:

http {
    ...

    upstream backend_servers {
        server backend1.example.com fail_timeout=10s;
        server backend2.example.com backup;
        server backend3.example.com;
    }

    server {
        ...

        location / {
            proxy_pass http://backend_servers;
        }
    }
}

В приведенной выше конфигурации параметр fail_timeout указывает время, в течение которого Nginx должен ждать, прежде чем пометить сервер как отказавший. Если сервер не отвечает в течение указанного времени (например, 10 секунд), Nginx временно прекратит отправлять запросы на этот сервер. Кроме того, параметр backup определяет backend2.example.com как резервный сервер. Если основные серверы выйдут из строя, Nginx автоматически перенаправит трафик на резервный сервер.

Заключение

Настройка Nginx в качестве обратного прокси-сервера — это эффективный способ оптимизации производительности, масштабируемости и безопасности инфраструктуры вашего веб-сервера. Следуя пошаговому руководству, представленному в этой статье, вы сможете настроить Nginx в качестве обратного прокси-сервера и использовать его функции, такие как балансировка нагрузки, кэширование, терминация SSL/TLS и контроль доступа.

Не забудьте настроить конфигурацию в соответствии с вашими конкретными требованиями и архитектурой. Регулярно контролируйте и тестируйте свою настройку, чтобы обеспечить оптимальную производительность и надежность. Следите за документацией Nginx и передовыми методами, чтобы в полной мере воспользоваться этим универсальным инструментом.

Используя Nginx в качестве обратного прокси-сервера, вы можете расширить возможности своих веб-серверов, обеспечить лучший пользовательский интерфейс и эффективно защитить внутренние ресурсы.

Удачной настройки обратного прокси-сервера Nginx!

Written by Иван Васильков

Системный администратор и DevOps с опытом 10+ лет.