
Итак, у меня есть 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
Как уже упоминалось в комментариях, у вас есть как минимум две очевидные проблемы:
«Завершающие» косые черты в каждом отдельном слове
ProxyPass
иProxyPassReverse
утверждении должны совпадать.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
если они по какой-то причине еще не включены.