Конфигурация обратного прокси-сервера Apache

Конфигурация обратного прокси-сервера Apache

Итак, у меня есть Debian 9, на котором запущен Apache 2.4.25.

Я хотел бы, чтобы Apache также обслуживал веб-контент с другого сервера (http://192.168.1.100:8088) в сети; я настроил mod_proxy для этого, но мне сложно заставить все это работать.

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

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    ProxyPreserveHost On
    ProxyRequests Off
    <proxy *>
      Order deny,allow
      Allow from all
    </proxy>
    ProxyPass /app1 http://192.168.1.100:8088/
    ProxyPassReverse /app1 http://localhost/
</virtualHost>

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

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    ProxyPreserveHost On
    ProxyRequests Off
    <proxy *>
      Order deny,allow
      Allow from all
    </proxy>
    ProxyPass / http://192.168.1.100:8088/
    ProxyPassReverse / http://localhost/
</virtualHost>

Я думаю, что, возможно, мне нужно выполнить что-то вроде ReWrite? У меня нет особого опыта использования Apache mod_proxy.

:-(

решение1

Как уже упоминалось в комментариях, у вас есть как минимум две очевидные проблемы:

  1. «Завершающие» косые черты в каждом отдельном слове ProxyPassи ProxyPassReverseутверждении должны совпадать.

  2. ProxyPassи ProxyPassReverseдолжны ссылаться на один и тот же хост.

Итак, в вашем первом примере:

ProxyPass /app1 http://192.168.1.100:8088/
ProxyPassReverse /app1 http://localhost/

Должно быть:

ProxyPass /app1 http://192.168.1.100:8088
ProxyPassReverse /app1 http://192.168.1.100:8088

Или:

ProxyPass /app1 http://localhost
ProxyPassReverse /app1 http://localhost

Для вашего второго примера /считается «завершающим» слешем для целей, упомянутых здесь. Итак:

ProxyPass / http://192.168.1.100:8088/
ProxyPassReverse / http://localhost/

Нужно просто сопоставить хосты:

ProxyPass / http://192.168.1.100:8088/
ProxyPassReverse / http://192.168.1.100:8088/

Или:

ProxyPass / http://localhost/
ProxyPassReverse / http://localhost/

Примечания

  • Вероятно, стоит упомянуть, что способ обработки Apache проксируемых URL-адресов /может дать лучшие результаты, чем /app1в зависимости от того, как принимающее приложение формирует свои собственные URL-адреса.

  • В зависимости от того, как работает принимающее приложение, вам может потребоваться проксирование нескольких URL-адресов.

  • Возможно, вы захотите включить mod_proxy_htmlи mod_proxy_httpповерх, mod_proxyесли они по какой-то причине еще не включены.

Связанный контент