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

Apache ProxyPassReverse переназначает доменное имя, но не порт

Я пытаюсь использовать прокси-сервер Apache в качестве интерфейса для службы, работающей на другом сервере в моей инфраструктуре. Назовем их proxy.example.com и service.example.com.

Proxy.example.com прослушивает порт 80, но service.example.com прослушивает порт 8888. Первое, что делает service.example.com, когда вы подключаетесь к нему, - отправляет 302 редирект, в который включен порт 8888. это - и Apache правильно переназначает доменное имя, но не порт в перенаправлении. Сервис на service.example.com - это сторонний упакованный продукт, поэтому давайте предположим, что мы не можем каким-либо образом изменить способ его работы.

Соответствующий бит конфигурации Apache выглядит так:

ProxyPreserveHost On
ProxyPass / http://service.example.com:8888/
ProxyPassReverse / http://service.example.com:8888/

Вот несколько (слегка анонимных) Telnet-сетей на порт 80. Во-первых, переход прямо на service.example.com:

$ telnet service.example.com 8888
Trying xxx.xxx.xxx.xxx...
Connected to service.example.com.
Escape character is '^]'.
GET / HTTP/1.0
Host: service.example.com

HTTP/1.0 302 Found
Date: Thu, 19 Jan 2012 10:38:54 GMT
Content-Type: text/html
Location: http://service.example.com:8888/directory/index.html

Connection closed by foreign host.

И пройдя через proxy.example.com:

$ telnet proxy.example.com 80
Trying yyy.yyy.yyy.yyy... 
Connected to proxy.example.com.
Escape character is '^]'.
GET / HTTP/1.0
Host: proxy.example.com

HTTP/1.1 302 Found
Date: Thu, 19 Jan 2012 10:41:08 GMT
Location: http://proxy.example.com:8888/directory/index.html
Via: 1.0 service.example.com
Vary: Accept-Encoding
Content-Length: 0
Connection: close

Connection closed by foreign host.

Итак, как я могу заставить Apache переназначить номер порта, а также имя домена в 302 редиректе?

Я просто догадываюсь, но насколько я могу судить, ProxyPreserveHost здесь не нужен. У меня есть серверные службы на нестандартных портах (> 9000), и он работает, как ожидалось, только с директивами ProxyPass и ProxyPassRevere

Не могли бы вы попробовать еще раз после того, как закомментировали ProxyPreserveHost On?