Thank you for reading this post, don't forget to subscribe!
Обратный прокси – сервер представляет собой тип прокси-сервера, который принимает HTTP(S) запросы и прозрачно распределяет их на один или несколько внутренних серверов. Обратные прокси-серверы являются полезными, поскольку многие современные веб – приложения обработки входящих запросов HTTP с использованием серверов приложений бэкэнда, которые не должны быть доступны пользователям напрямую и часто поддерживают только элементарные функции HTTP.
Вы можете использовать обратный прокси-сервер для предотвращения непосредственной доступности основных серверов приложений. Они также могут быть использованы для распределения нагрузки от входящих запросов на нескольких различных серверах приложений, увеличивая производительность в масштабе и обеспечение отказоустойчивости. Они могут заполнить пробелы с функциями сервера приложений, которые они не предоставляют, такие как кэширование, сжатие а также шифрование SSL.
В этой статье показано как настроить Apache в качестве основного обратного прокси – сервера с помощью расширения mod_proxy
для перенаправления входящих подключений к одному или нескольким внутренним серверам, работающих в той же сети.
Шаг 1 – Введение в необходимые модули Apache
Модули, которые необходимы для использования Apache в качестве обратного прокси – сервера включают в себя mod_proxy
и некоторые из его дополнительных модулей, которые расширяют ее функциональные возможности для поддержки различных сетевых протоколов. В частности, мы будем использовать:
mod_proxy
, главный прокси-модуль модуля Apache для перенаправления соединений; который позволяет Apache выступать в качестве шлюза для основных серверов приложений.mod_proxy_http
, добавляет поддержку проксирования HTTP соединений.mod_proxy_balancer
иmod_lbmethod_byrequests
, что добавлять новые функции балансировки нагрузки для нескольких внутренних серверов.
Все четыре модуля включены по умолчанию на новой установке CentOS 7. Вы можете убедиться, что они разрешены командой:
1 |
<strong>httpd -M</strong> |
Выводом команды будет список всех включенных модулей Apache.
1 2 3 4 5 6 7 8 9 |
. . . proxy_module (shared) . . . lbmethod_byrequests_module (shared) . . . proxy_balancer_module (shared) . . . proxy_http_module (shared) . . . |
В случае , если модули не включены, вы можете включить их, открыв /etc/httpd/conf.modules.d/00-proxy.conf
с помощью текстового редактора nano
:
1 |
<strong>nano /etc/httpd/conf.modules.d/00-proxy.conf</strong> |
и раскомментировать линии с необходимыми модулями, удалив #
знак в начале строки, так что файл выглядит следующим образом :
1 2 3 4 5 6 7 8 9 |
. . . LoadModule proxy_module modules/mod_proxy.so . . . LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so . . . LoadModule proxy_balancer_module modules/mod_proxy_balancer.so . . . LoadModule proxy_http_module modules/mod_proxy_http.so . . . |
Для того, чтобы изменения вступили в силу, сохраните файл и перезапустить Apache.
1 |
<strong>systemctl restart httpd</strong> |
Apache теперь готов действовать в качестве обратного прокси-сервера для HTTP-запросов. На следующем шаге мы создадим два самых основных внутренних сервера. Это поможет нам проверить, если конфигурация работает правильно.
Шаг 2 – Создание тестовых серверов
Запуск некоторых простых внутренних серверов является простой способ проверить, что ваша конфигурация Apache работает должным образом . Здесь мы создадим два тестовых сервера, которые отвечают HTTP – запросам с печатью строки текста. Один сервер будет сказать Привет, мир! а другой скажет Мой мир!
192.168.1.10
192.168.1.11
Шаг 3 – Изменение конфигурации по умолчанию. Включение обратного прокси-сервера
В этом разделе мы настроим виртуальный хост Apache по умолчанию, чтобы использовать в качестве обратного прокси-сервера для одного сервера бэкэнда или массива с балансировкой нагрузки внутренних серверов.
Примечание
В этом руководстве мы применяем настройки на уровне виртуального хоста. При установке по умолчанию Apache, нет настроенных виртуальных хостов. Мы будем создавать единый виртуальный хост по умолчанию, который будет ловить весь трафик. Тем не менее, вы можете использовать все эти фрагменты конфигурации на других виртуальных хостов.
Если ваш сервер работает на Apache как HTTP и HTTPS-сервер, ваша конфигурация обратного прокси-сервера должна быть размещена как в HTTP и HTTPS виртуальных хостов.
Создание нового виртуального хоста по умолчанию, создав новый пустой файл конфигурации Apache в каталоге /etc/httpd/conf.d
, используя nano
или ваш любимый текстовый редактор.
1 |
<strong>nano /etc/httpd/conf.d/default-site.conf</strong> |
В первом примере ниже показано, как настроить виртуальный хост по умолчанию для обратного прокси-сервера для одного сервера, а второй устанавливает балансировку нагрузки обратного прокси для нескольких внутренних серверов.
Пример 1 – Обратное проксирование сервера. Один бэкэнд.
Вставьте следующее содержимое в файл default-site.conf
, так что ваш файл конфигурации выглядит следующим образом:
1 2 3 4 5 |
<VirtualHost *:80> ProxyPreserveHost On ProxyPass / http://192.168.1.10:8080/ ProxyPassReverse / http://192.168.1.11:8080/ </VirtualHost> |
Если вы следовали вместе с серверами, например, на шаге 2, используйте 192.168.1.10:8080
как написано в блоке выше. Если у вас есть свои собственные серверы приложений, используйте их адреса вместо этих.
Есть три директивы здесь:
ProxyPreserveHost
передают Apache оригинальныйHost
заголовок на внутренний сервер. Это полезно, так как это делает сервер бэкенд осознаный адрес, используемый для доступа к приложению.ProxyPass
главная директива конфигурации прокси. В этом случае, он указывает, что все в корневом URL (/
) должен быть отображен на внутренний сервер по указанному адресу. Например, если Apache получает запрос на/example
, он будет подключаться и вернет ответ на оригинальный клиент.http://your_backend_server/example
ProxyPassReverse
должен иметь ту же конфигурацию, что иProxyPass
. Это говорит Apache, чтобы изменить заголовки ответа от сервера бэкэнда. Это гарантирует, что если внутренний сервер возвращает заголовок перенаправления местоположения, браузер клиента будет перенаправлен на адрес прокси – сервера и не адреса сервера, бэкенда, который не будет работать, как предполагалось.
Чтобы изменения вступили в силу, перезапустите Apache.
1 |
<strong>systemctl restart httpd</strong> |
Теперь, если вы получаете доступ к http://your_server_ip через веб – браузер, вы увидите ответ сервера бэкэнда вместо стандартной страницы приветствия Apache. Если вы следовали инструкциям Шаг 2, то вы будете видеть Привет мир!
Пример 2 – балансировки нагрузки между несколькими серверами Backend
Если у вас есть несколько внутренних серверов, хороший способ, чтобы распределить трафик между ними, когда проксирование заключается в использовании балансировки нагрузки функцией mod_proxy
.
Заменить все содержимое внутри блока VirtualHost
следующими, так чтобы ваш файл конфигурации выглядел следующим образом:
1 2 3 4 5 6 7 8 9 |
<VirtualHost *:80> <Proxy balancer://mycluster> BalancerMember http://192.168.1.10:8080 BalancerMember http://192.168.1.11:8081 </Proxy> ProxyPreserveHost On ProxyPass / balancer://mycluster/ ProxyPassReverse / balancer://mycluster/ </VirtualHost> |
Конфигурация аналогична предыдущей, но вместо указания одного сервера бэкэнд напрямую, мы использовали дополнительный блок Proxy
для определения нескольких серверов. Блок с именем balancer://mycluster
(имя может быть свободно изменено) и состоит из одного или нескольких BalancerMember
, которые определяют, лежащие в основе адреса бэкенда сервера. ProxyPass
и директива ProxyPassReverse
используют пул балансировки нагрузки с именем mycluster
вместо конкретного сервера.
Если вы следовали примеру на шаге 2, используя 192.168.1.10:8080
и 192.168.1.11:8081
для директивы BalancerMember
, как написано в блоке выше. Если у вас есть свои собственные серверы приложений, используйте их адреса вместо этих.
Чтобы изменения вступили в силу, перезапустите Apache.
1 |
<strong>systemctl restart httpd</strong> |
Зайдите в веб – браузере по адресу http://your_server_ip, вы увидите бэкэнд сервера вместо стандартной страницы Apache. Если вы следовали инструкциям на Шаге 2, обновите страницу несколько раз должен показать Привет, мир! и Мой мир!, То есть обратный прокси – сервер работал и балансировка нагрузки между обоими серверами.
Вывод
mod_proxy
можно эффективно использовать для настройки обратного прокси – сервера для серверов приложений, написанных на широкий спектр языков и технологий, таких как Python и Django или Ruby, и Ruby On Rails. Он может также использоваться для балансировки трафика между множеством внутренних серверов для сайтов с большим количеством трафика или для обеспечения высокой доступности через несколько серверов, или для обеспечения безопасной поддержки SSL на серверах, не поддерживающих SSL изначально.
В то время как mod_proxy
с mod_proxy_http
это, возможно, наиболее часто используемые комбинации модулей, существует несколько других модулей, которые поддерживают различные сетевые протоколы. Мы не использовали их здесь, но и некоторые другие популярные модули включают в себя:
mod_proxy_ftp
для FTP.mod_proxy_connect
для SSL туннелирования.mod_proxy_ajp
для AJP (Apache JServ Protocol), на основе Tomcat.mod_proxy_wstunnel
для веб-сокетов.
Чтобы узнать больше о mod_proxy
, вы можете прочитать на официальном сайте Apache документацию о mod_proxy
.