【发布时间】:2012-04-09 08:17:45
【问题描述】:
说明
具有监听 8080 的 webapps 的内部 Tomcat 服务器:
"http://internal:8080/foo-webservice/"
" http://internal:8080/foo-website/"面向外部的 Apache 服务器正在代理子域的请求:
“http://foo.domain.com/”子域根目录的任何请求都将被代理到 Tomcat 上的 foo-website webapp。
任何其他请求都会被代理到相应的路径/webapp
用例 A
请求:
“http://foo.domain.com/index.html”代理到:
“http://internal:8080/foo-website/index.html”
用例 B
-
请求:
李>
“http://foo.domain.com/webservice/listener.html?param1=foo¶m2=bar” -
代理到:
“http://internal:8080/foo-webservice/listener.html?param1=foo¶m2=bar”
虚拟主机定义
-
满足用例 B 的当前虚拟主机定义:
<VirtualHost *:80> ServerName foo.domain.com ProxyRequests Off <Proxy *> Order deny,allow Allow from all </Proxy> ErrorLog /var/log/apache2/foo_error.log LogLevel warn CustomLog /var/log/apache2/foo_access.log combined # RewriteRules # ? # ProxyPass ProxyPreserveHost On ProxyPass / http://internal:8080/ ProxyPassReverse / http://internal:8080/ </VirtualHost>
尝试 1
# RewriteRules
RewriteEngine On
RewriteRule ^/(.*) http://internal:8080/foo-website/$1 [P]
- 用例 A 得到满足
- 用例 B 失败
尝试 2
# RewriteRules
RewriteEngine On
RewriteRule ^/$ http://internal:8080/foo-website/$1 [P]
- 用例 B 得到满足
- 用例 A 不完全满足
- foo-website 中的 index.html 已加载,但 js、img 或 css 文件夹中的文件均未加载。
【问题讨论】:
标签: apache mod-rewrite mod-proxy