У меня есть сценарий, как показано ниже:
У меня есть URL с DNS Entry, скажем http://example.com
Когда пользователь входит http://example.com/portal
, (s) он переходит на веб-сервер Apache (2.2) (например, AWS 1). Там у меня есть запись VirtualHost, которая передает запрос другому веб-серверу Apache (например, AWS 2), работающему в локальной сети, например IP 192.168.1.1
с использованием обратного прокси. Веб-сервер Apache на 192.168.1.1
затем перенаправляет запрос на сервер приложений JBoss, используя обратный прокси.
При этом URL-адрес результирующей страницы изменяется на IP-адрес LAN. https:\\192.168.1.2\portal
.
Я хочу, чтобы исходный URL-адрес оставался неизменным, поскольку система внешних пользователей не знает, что 192.168.1.2
является.
Это мой первый вопрос. Пожалуйста, потерпите, если это не говорит само за себя.
Ниже приведен фрагмент файла vhost с AWS 1:
<VirtualHost 192.168.10.179:80>
ServerAdmin admin@example.com
DocumentRoot "D:/Program Files/Apache Software Foundation/Apache2.2/htdocs"
ServerName example
ServerAlias example
ErrorLog "logs/example-error.log"
# use always https
Redirect pernament / https://example.com/
</VirtualHost>
Ниже приведен фрагмент из ssl-файла AWS 1 (это не полная конфигурация):
<VirtualHost 192.168.10.179:443>
ServerAdmin admin@example.com
DocumentRoot "D:/Program Files/Apache Software Foundation/Apache2.2/htdocs"
ServerName example
ServerAlias example
ErrorLog "logs/example-ssl-error.log"
ProxyRequests Off
ProxyPreserveHost On
ProxyPass / http://192.168.1.1/
ProxyPassReverse / http://192.168.1.1/
</VirtualHost>
Ниже приведен фрагмент кода из файла vhost AWS 2:
<VirtualHost 192.168.1.1:80>
ServerAdmin admin@example.com
DocumentRoot "D:/Program Files/Apache Software Foundation/Apache2.2/htdocs"
ServerName aws2
ServerAlias aws2
ErrorLog "logs/aws2.log"
# use always https
Redirect pernament / https://192.168.1.1/
</VirtualHost>
Ниже приведен фрагмент ssl-файла AWS 2 (это не полная конфигурация):
<VirtualHost 192.168.1.1:443>
ServerAdmin admin@example.com
DocumentRoot "D:/Program Files/Apache Software Foundation/Apache2.2/htdocs"
ServerName aws2
ServerAlias aws2
ErrorLog "logs/aws2-ssl-error.log"
ProxyRequests Off
ProxyPreserveHost On
ProxyPass / http://192.168.1.2/ #This is where JBoss is running
ProxyPassReverse / http://192.168.1.2/
</VirtualHost>
Использовать это: ProxyPreserveHost On
на обоих прокси.
Из эта ссылка:
"Когда этот параметр включен, эта опция будет передавать строку Host: из входящего запроса на проксируемый хост вместо имени хоста, указанного в строке ProxyPass.
Обычно этот параметр должен быть отключен. Это в основном полезно в особых конфигурациях, таких как виртуальный хостинг на основе прокси-сервера с массовым именем, где исходный заголовок Host должен быть оценен внутренним сервером ».
редактировать: Ах, значит вы со шлюзом приковали прокси! Тогда вам также следует использовать ProxyVia On
установка директивы на aws2 или, может быть, на обоих прокси. Попробуй это.
В Redirect permanent
должен ссылаться не на внутренний IP-адрес, а на полный фактический URL-адрес сайта, поскольку перенаправление выполняется в браузере:
Либо используйте полный URL сайта в Redirect
предложение или используйте mod_rewrite для динамического перенаправления.
Почему вы снова перенаправляете на http: // с AWS1 на AWS2, когда на AWS2 включен https: //? Измените настройки ProxyPass и ProxyReverse в AWS1 на https: //.