我的 apache 2.2 mod_proxy 大部分情况下运行良好,但在使用一些较新的工具时遇到了一些问题。
下面我们有一台服务器的配置文件。
我们的问题是,当用户访问 web.example.com/app1/prd/test.php 时,最终应用程序只能看到一些东西。它看到的当前 URL 请求是 webprd.example.local:8194/test.php 和标头:X-Forwarded-Host:web.example.com
我怎样才能将标头写入请求中,其中包含原始请求者拥有的完整 URL/URI?应用程序需要该信息供我们使用。类似 X-Forwarded-URI:web.example.com/app1/prd/test.php
或者我们甚至可以跳过主机,因为那是另一个标头。
<VirtualHost xxx.xxx.xxx.xxx:443>
#removed some ssl and log related settings.
ProxyPreserveHost On
ProxyBadHeader Ignore
ServerName web.example.com
#app1
ProxyPass /app1/dev/ https://webdev.example.local:4433/ timeout=600
ProxyPassReverse /app1/dev/ https://webdev.example.local:4433/
ProxyPass /app1/test/ http://webtest.example.local:8194/ timeout=600
ProxyPassReverse /app1/test/ http://webtest.example.local:8194/
ProxyPass /app1/prd/ http://webprd.example.local:8194/ timeout=600
ProxyPassReverse /app1/prd/ http://webprd.example.local:8194/
ProxyPass /app1/ http://webprd.example.local:8194/ timeout=600
ProxyPassReverse /app1/ http://webprd.example.local:8194/
#app2
ProxyPass /app2/dev/ http://webdev.example.local:16222/
ProxyPassReverse /app2/dev/ http://webdev.example.local:16222/
ProxyPass /app2/test/ http://webtest.example.local:16222/
ProxyPassReverse /app2/test/ http://webtest.example.local:16222/
</VirtualHost>
答案1
我不确定是否要设置标头,因为这看起来有点复杂。但您可以简单地在代理中包含相同的 URI,如下所示:
ProxyPass /app1/prd/ http://webprd.example.local:8194/app1/prd/ timeout=600
ProxyPassReverse /app1/prd/ http://webprd.example.local:8194/app1/prd/
我不确定您为什么需要这些信息,所以我不能确定,但这不能解决您的问题吗?