Поиск по сайту:

Как использовать HTTP-сервер Apache в качестве обратного прокси-сервера с помощью расширения mod_proxy


Введение

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

В этой статье DigitalOcean мы увидим, как настроить Apache на Ubuntu 13 и использовать его в качестве обратного прокси-сервера, чтобы приветствовать входящие подключения и перенаправлять их на серверы приложений, работающие в той же сети. Для этой цели мы будем использовать и работать с расширением mod_proxy и несколькими другими связанными модулями Apache.

Глоссарий

1. Апач

2. Apache работает как обратный прокси-сервер с использованием mod_proxy

3. Установка Apache и mod_proxy

  1. Обновление операционной системы
  2. Получение основных инструментов сборки
  3. Получение модулей и зависимостей

4. Настройка подключений Apache к прокси

  1. Активация модулей
  2. Изменение конфигурации по умолчанию
  3. Включение балансировки нагрузки
  4. Включение поддержки SSL
  5. Перезапуск Apache

Апачи

HTTP-сервер Apache не нуждается в представлении, так как это, пожалуй, самый известный и популярный из существующих веб-серверов. Apache можно очень легко запустить на многих различных платформах и настройках. Приложение поставляется с множеством сторонних модулей для решения различных задач (mod_rewrite для перезаписи URL на основе правил), и одним из них, хотя в настоящее время относительно пренебрегают, является mod_proxy: модуль Apache для реализации прокси (или шлюз) для серверов, работающих на бэкенде.

Совет. Согласно некоторым статьям, название Apache происходит от «неоднородной» природы сервера, то есть он представляет собой набор исправлений приложений (или модулей).

Примечание. Чтобы узнать больше об Apache, вы можете прочитать статью в Википедии на тему HTTP-сервер Apache.

Apache работает как обратный прокси-сервер с использованием mod_proxy

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

Вот некоторые из этих модулей:

  • mod_proxy: основной прокси-модуль для Apache, который управляет подключениями и перенаправляет их.
  • mod_proxy_http:этот модуль реализует функции прокси для протоколов HTTP и HTTPS.
  • mod_proxy_ftp: Этот модуль делает то же самое, но для протокола FTP.
  • mod_proxy_connect: используется для туннелирования SSL.
  • mod_proxy_ajp: Используется для работы с протоколом AJP.
  • mod_proxy_wstunnel: Используется для работы с веб-сокетами (т.е. WS и WSS).
  • mod_proxy_balancer: используется для кластеризации и балансировки нагрузки.
  • mod_cache: Используется для кэширования.
  • mod_headers: используется для управления заголовками HTTP.
  • mod_deflate: используется для сжатия.

Примечание. Чтобы узнать больше об Apache и mod_proxy, вы можете ознакомиться с официальной документацией Apache по этому вопросу здесь.

Установка Apache и mod_proxy

Примечание. Инструкции, приведенные здесь, краткие, так как, скорее всего, у вас уже установлен Apache или вы знаете, как его использовать. Тем не менее, следуя инструкциям ниже, вы можете получить новый Ubuntu VPS с Apache за считанные минуты.

Обновление операционной системы

Начнем с подготовки нашего виртуального сервера. Сначала мы собираемся обновить доступные по умолчанию компоненты, чтобы убедиться, что у нас все обновлено.

Обновите список источников программного обеспечения и обновите устаревшие приложения:

  1. aptitude update
  2. aptitude -y upgrade

Получение основных инструментов сборки

Давайте продолжим получение основного пакета для создания приложений — build-essential. Этот пакет содержит инструменты, необходимые для установки определенных вещей из исходного кода.

Выполните следующую команду, чтобы установить пакет build-essential:

  1. aptitude install -y build-essential

Получение модулей и зависимостей

Далее мы собираемся получить модуль и зависимости.

Выполните следующую команду, чтобы установить их:

  1. aptitude install -y libapache2-mod-proxy-html libxml2-dev

Настройка подключений Apache к прокси

Активация модулей

Перед настройкой Apache мы включим необходимые модули, которые будем использовать в этом руководстве или которые могут пригодиться в будущем.

Во-первых, давайте проверим, что все модули правильно установлены и готовы к активации.

Выполните следующую команду, чтобы получить список доступных модулей Apache:

  1. a2enmod
  2. # You will be presented with an output similar to:
  3. # Your choices are: access_compat actions alias allowmethods asis auth_basic auth_digest auth_form authn_anon authn_core authn_dbd authn_dbm authn_file authn_socache authnz_ldap authz_core authz_dbd authz_dbm authz_groupfile authz_host authz_owner authz_user autoindex buffer cache cache_disk cache_socache cgi cgid charset_lite data dav dav_fs dav_lock dbd deflate dialup dir dump_io echo env expires ext_filter file_cache filter headers heartbeat heartmonitor include info lbmethod_bybusyness lbmethod_byrequests lbmethod_bytraffic lbmethod_heartbeat ldap log_debug log_forensic lua macro mime mime_magic mpm_event mpm_itk mpm_prefork mpm_worker negotiation proxy proxy_ajp proxy_balancer proxy_connect proxy_express proxy_fcgi proxy_fdpass proxy_ftp proxy_html proxy_http proxy_scgi proxy_wstunnel ratelimit reflector remoteip reqtimeout request rewrite sed session session_cookie session_crypto session_dbd setenvif slotmem_plain slotmem_shm socache_dbm socache_memcache socache_shmcb speling ssl status substitute suexec unique_id userdir usertrack vhost_alias xml2enc
  4. # Which module(s) do you want to enable (wildcards ok)?

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

Список модулей:

  1. proxy proxy_ajp proxy_http rewrite deflate headers proxy_balancer proxy_connect proxy_html

Или, в качестве альтернативы, вы можете запустить следующие команды, чтобы включить модули один за другим:

  1. a2enmod proxy
  2. a2enmod proxy_http
  3. a2enmod proxy_ajp
  4. a2enmod rewrite
  5. a2enmod deflate
  6. a2enmod headers
  7. a2enmod proxy_balancer
  8. a2enmod proxy_connect
  9. a2enmod proxy_html

Примечание. Некоторые модули могут быть включены по умолчанию. Попытка включить их дважды просто гарантирует, что они активны.

Изменение конфигурации по умолчанию

На этом шаге мы увидим, как изменить файл конфигурации по умолчанию 000-default.conf внутри /etc/apache2/sites-enabled, чтобы настроить «проксирование » функциональность.

Выполните следующую команду, чтобы изменить виртуальный хост Apache по умолчанию с помощью текстового редактора nano:

  1. nano /etc/apache2/sites-enabled/000-default.conf

Здесь мы будем определять виртуальный хост-прокси, используя вместе mod_virtualhost и mod_proxy.

Скопируйте и вставьте приведенный ниже блок конфигурации, изменив его в соответствии с вашими потребностями:

    <VirtualHost *:*>
        ProxyPreserveHost On
        
        # Servers to proxy the connection, or;
        # List of application servers:
        # Usage:
        # ProxyPass / http://[IP Addr.]:[port]/
        # ProxyPassReverse / http://[IP Addr.]:[port]/
        # Example: 
        ProxyPass / http://0.0.0.0:8080/
        ProxyPassReverse / http://0.0.0.0:8080/
        
        ServerName localhost
    </VirtualHost>

Нажмите CTRL+X и подтвердите Y, чтобы сохранить и выйти.

Примечание. Чтобы узнать больше о конфигурациях виртуального хоста, вы можете ознакомиться с подробным руководством по Apache по этому вопросу, нажав здесь.

Включение балансировки нагрузки

Если у вас есть несколько внутренних серверов, хороший способ распределить соединение при их проксировании — использовать функции балансировки нагрузки Apache.

Начните редактировать настройки виртуального хоста, как и в предыдущем шаге, но на этот раз используя приведенный ниже пример конфигурации:

    <Proxy balancer://mycluster>
        # Define back-end servers:

        # Server 1
        BalancerMember http://0.0.0.0:8080/
        
        # Server 2
        BalancerMember http://0.0.0.0:8081/
    </Proxy>
    
    <VirtualHost *:*>
        # Apply VH settings as desired
        # However, configure ProxyPass argument to
        # use "mycluster" to balance the load
        
        ProxyPass / balancer://mycluster
    </VirtualHost>

Включение поддержки обратного прокси-сервера SSL

Если вы имеете дело с SSL-соединениями и сертификатами, вам также необходимо включить дополнительный виртуальный хост с указанными ниже настройками.

Повторите шаги из предыдущих шагов, но с использованием следующих параметров конфигурации:

    Listen 443
     
    NameVirtualHost *:443
    <VirtualHost *:443>
    
        SSLEngine On
        
        # Set the path to SSL certificate
        # Usage: SSLCertificateFile /path/to/cert.pem
        SSLCertificateFile /etc/apache2/ssl/file.pem
        
        
        # Servers to proxy the connection, or;
        # List of application servers:
        # Usage:
        # ProxyPass / http://[IP Addr.]:[port]/
        # ProxyPassReverse / http://[IP Addr.]:[port]/
        # Example: 
        ProxyPass / http://0.0.0.0:8080/
        ProxyPassReverse / http://0.0.0.0:8080/
        
        # Or, balance the load:
        # ProxyPass / balancer://balancer_cluster_name
    
    </VirtualHost>

Перезапуск Апача

Когда вы будете довольны своей конфигурацией, вам нужно будет перезапустить облачный сервер, чтобы изменения вступили в силу.

Выполните следующую команду, чтобы перезапустить Apache:

  1. service apache2 restart

Вот и все!

Теперь вы можете посетить свой VPS, и Apache будет использовать обратное прокси-соединение с вашими внутренними серверами приложений.