Apache proxy_http 重定向到 ip 並設置主機名
希望你們能幫助我解決我遇到的代理問題。
我已經擁有的
我已經設置了一個 apache http 反向代理,將來自 *.proxy.domain 的請求代理到 *.intern.domain。apache 是從外部網路訪問我的內部 Web 應用程序的唯一方法。
例子:
app.proxy.domain -> app.intern.domain mail.proxy.domain -> mail.intern.domain
這一切都很好,但我有以下問題。
問題
我想代理以下請求:
app.proxy.domain -> app.internal.domain app-dev.proxy.domain -> app-dev.internal.domain
這沒問題,但不幸的是,app-dev 伺服器執行的是應用伺服器 web 應用程序的精確副本,而這個 web 應用程序只響應它的主機名 (app.intern.domain)
所以我需要做的是代理以下
app.proxy.domain -> app.internal.domain (10.0.1.1) app-dev.proxy.domain -> app.internal.domain (10.0.1.2)
我可以做第二件事,在 /etc/hosts 中添加“10.0.1.2 app.internal.domain”,但這也意味著 app.proxy.domain 將登陸開發伺服器。
我正在尋找一個選項,僅在 app-dev.proxy.domain 的 vhost 配置文件中設置 /etc/hosts 條目,這樣所有其他 vhost 配置將只對 app.intern.domain 使用 DNS。
想法…
有沒有辦法告訴 apache 配置,
ProxyPass / http://10.0.1.2/
但將 app.intern.domain 作為主機名發送?
編輯 dev-servers 網路應用程序來監聽 app-dev 是沒有選擇的,因為它應該是一個精確的副本(不是我的決定……)
謝謝!
可能您可以將 mod_headers 與 mod_proxy 結合使用。不過我還沒有測試過。
因此,對於您的 app-dev 虛擬主機,您可以擁有:
RequestHeader set Host "app.internal.domain"
然後你會添加:
ProxyPreserveHost On
醜陋的解決方法是使用(而不是:濫用)/etc/hosts 將 app.internal.domain 指向 localhost,然後將 Apache 配置為偵聽兩個額外的埠,一個用於您的應用程序和 app-dev。所以反向代理兩次:
Listen 80 Listen 127.0.0.1:8001 Listen 127.0.0.1:8001 <VirtualHost *:80> ServerName app.proxy.domain ProxyPass / http://app.internal.domain:8001 </VirtualHost> <VirtualHost *:80> ServerName app-dev.proxy.domain ProxyPass / http://app.internal.domain:8002 </VirtualHost> <VirtualHost 127.0.0.1:8001> ServerName app.internal.domain ProxyPreserveHost On ProxyPass / http://10.0.1.1/ </VirtualHost> <VirtualHost 127.0.0.1:8002> ServerName app.internal.domain ProxyPreserveHost On ProxyPass / http://10.0.1.2/ </VirtualHost>