Apache代理子域根请求

描述

>在8080上侦听webapps的内部Tomcat服务器:
的 “http://内部:8080 /富Web网页/”
“HTTP://内部:8080 /富-网站/”
>面向外部的Apache服务器代理子域的请求:
“http://foo.domain.com/”
>子域根的任何请求都将代理到Tomcat上的foo-website webapp.
>任何其他请求都将代理到相应的路径/ webapp

用例A.

>要求:
“http://foo.domain.com/index.html”
>代理:
“HTTP://内部:8080 /富-网站/ index.html的”

用例B

>要求:
“http://foo.domain.com/webservice/listener.html?param1=foo\u0026amp;param2=bar”
>代理:
的 “http://内部:8080 /富Web网页/ listener.html参数1 = FOO&安培; param2的=栏”

VirtualHost定义

>满足用例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文件夹中没有任何文件.

最佳答案 ProxyPass规则按顺序匹配

 ProxyPass        /webservice/ http://internal:8080/foo-webservice/
 ProxyPassReverse /webservice/ http://internal:8080/foo-webservice/

 ProxyPass        /website/ http://internal:8080/foo-website/
 ProxyPassReverse /website/ http://internal:8080/foo-website/

 ProxyPass        / http://internal:8080/foo-website/
 ProxyPassReverse / http://internal:8080/foo-website/

没有重写规则.那还不够好吗?

点赞