Apache-2.2
Apache ProxyPassReverse 重新映射域名但不重新映射埠
我正在嘗試將 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 後重試嗎?