我在端口 8080 上运行 Jetty,作为在 80 上运行的 Apache2 实例后面的反向代理。配置如下:
<VirtualHost *:80>
ServerName default
##########################
# DocumentRoot
DocumentRoot /var/www
<Directory /var/www/>
Options FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
##########################
# Error Handling
ErrorDocument 503 /errors/503.html
ErrorDocument 404 /errors/404.html
##########################
# Proxy
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass /errors !
ProxyPass / http://localhost:8080/
ProxyPreserveHost On
ProxyStatus On
</VirtualHost>
基本上,任何与其他配置的虚拟主机不匹配的请求最终都会匹配此虚拟主机。换句话说,任何与 Apache 虚拟主机不匹配的内容最终都会被代理到 Jetty。
Jetty 正在运行一个 Web 应用程序,该应用程序根据请求标头中的 Host 做出不同的响应。换句话说,两者foo.com和酒吧网可以指向这个网络应用程序,它将根据您请求的主机显示一个 fooish 页面或一个 barish 页面。
我需要通过代理公开此功能,并且我希望通过以下方式实现mod_proxy将调用转换为如下形式:
http://myapp.acme.com/foo.com/index.html
到
http://foo.com/index.html
然后将其传递给 Jetty,以便 Web 应用程序能够根据请求的主机正确运行。使用我当前的配置,请求第一个 URL 会传递:
Host: myapp.acme.com
GET /foo.com/index.html
但我需要它传递下去
Host: foo.com
GET /index.html
答案1
这或者类似的东西可能会起作用:
ProxyPreserveHost Off # default is Off, just making the point
ProxyRemote * http://localhost:8080/
RewriteEngine On
RewriteRule ^/([^/]+)/(.*) http://$1/$2 [P]
ProxyRemote
表示此代理(端口 80 上的代理)将通过指定的代理转发请求。如果这没有意义,请大声喊出来!我现在没时间了。代理文档应该有帮助。