Назад | Перейти на главную страницу

Настройка прокси-сервера Apache

У меня есть сценарий, как показано ниже:

У меня есть 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: //.