Обратный (реверс) прокси-сервер выступает в роли посредника для запросов клиентов, ищущих ресурсы на других серверах. Он обеспечивает дополнительный уровень абстракции и контроля для обеспечения бесперебойного потока сетевого трафика между клиентами и серверами. Apache, популярный веб-сервер, может быть легко настроен как обратный прокси-сервер.
Использование Apache в качестве обратного прокси означает, что Apache получает запросы из Интернета и пересылает их на серверы во внутренней сети. Эти серверы обрабатывают запросы и отвечают Apache, который затем отправляет ответы обратно клиенту. Такая настройка может быть полезна для балансировки нагрузки, кэширования и разделения публичного и частного сетевого трафика.
Настройка Apache в качестве обратного прокси требует использования модуля mod_proxy, который обычно входит в стандартную установку Apache. Модуль предоставляет необходимые директивы для работы с функциями прокси.
Шаги по настройке Apache в качестве обратного прокси-сервера
Запустите приложение терминала.
Включите модуль proxy и proxy_http для Apache.
1 2 | sudo a2enmod proxy proxy_http sudo systemctl restart apache2 |
- В дистрибутивах с поддержкой a2enmod можно просто выполнить приведенную выше команду без необходимости вручную включать необходимые модули.
- В CentOS и Red Hat оба модуля включены по умолчанию, поэтому ручное включение модулей не требуется.
Создайте или отредактируйте файл виртуального хоста, в котором вы хотите настроить обратный прокси, используя удобный для вас текстовый редактор.
1 | sudo nano /etc/apache2/sites-available/your-site.conf |
Добавьте конфигурацию прокси в нужный параметр VirtualHost.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <VirtualHost *:80> ProxyRequests Off <Proxy *> Order deny,allow Allow from all </Proxy> ProxyPass "/backend-service-01" "http://backend-service-01.local/" ProxyPassReverse "/backend-service-01" "http:///backend-service-01.local" ProxyPass "/backend-service-02" "http://backend-service-02.local/" ProxyPassReverse "/backend-service-02" "http://backend-service-02.local" </VirtualHost> |
- ProxyRequests Off - Отключает прямые прокси-запросы. Это важно для установки обратного прокси, чтобы гарантировать, что ваш сервер не будет непреднамеренно действовать как прямой прокси.
- <Proxy *> ... </Proxy> - Определяет контроль доступа для прокси. Символ * означает, что он применяется ко всему проксируемому содержимому.
- Order deny,allow - Устанавливает порядок обработки директив Deny и Allow. В этом случае правила deny обрабатываются раньше правил allow.
- Allow from all - Разрешает доступ со всех IP-адресов.
- ProxyPass - Сопоставляет удаленные серверы с пространством имен локального сервера. Например, ProxyPass "/backend-service-01" "http://backend-service-01.local/" означает, что когда кто-то обращается к http://your-apache-server/backend-service-01, он на самом деле обращается к http://backend-service-01.local/ за кулисами.
- ProxyPassReverse - Корректирует URL в заголовках Location, Content-Location и URI в ответах HTTP-перенаправления. Это необходимо для обеспечения того, чтобы перенаправления, выданные внутренним сервером, указывали на обратный прокси, а не на оригинальный сервер.
Сохраните и выйдите из редактора.
Перезапустите Apache, чтобы применить изменения.
1 | sudo systemctl restart apache2 |
1 | sudo systemctl restart httpd |
Протестируйте прямой доступ к бэкэнд-сервису.
1 | curl http://backend-service-01.local |
Запрос не будет выполнен, если внутренняя служба находится в частной сети под NAT.
Этот тест также можно выполнить, перейдя по URL-адресу с помощью веб-браузера.
Проверка доступа к бэкэнд-сервису через настроенный обратный прокси Apache.
1 | curl http://proxy-server/backend-service-01 |