Apache-2.2

Apache ProxyPassReverse 重新映射域名但不重新映射埠

  • January 19, 2012

我正在嘗試將 Apache 代理用作在我的基礎架構中的不同伺服器上執行的服務的前端。我們稱它們為 proxy.example.com 和 service.example.com。

Proxy.example.com 正在偵聽埠 80,但 service.example.com 正在偵聽埠 8888。 service.example.com 連接到它時所做的第一件事是發送包含埠 8888 的 302 重定向它 - 並且 Apache 正確地重新映射了域名而不是重定向中的埠。service.example.com 上的服務是第三方打包產品,所以我們假設我們無法以任何方式改變它的工作方式。

Apache 配置的相關位如下所示:

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

這裡有一些(稍微匿名的)到埠 80 的 telnet。首先,直接訪問 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 後重試嗎?

引用自:https://serverfault.com/questions/351434