2016-12-29 53 views
1

我希望能夠做的就是採取如下:的httpd - 反向代理多個端口

http://localhost:10000 
http://localhost:11000 
http://localhost:12000 

和路由他們喜歡的分別如下:

http://my-app (this is port 10000 traffic) 
http://my-app/app (this is port 11000 traffic) 
http://my-app/blog (this is port 12000 traffic) 

這裏是我的conf.d文件 -

<VirtualHost *:80> 
    ServerName my-app.domain.com 
    ServerAlias my-app 

    Redirect/https://my-app.domain.com/ 
</VirtualHost> 

<VirtualHost *:443> 
    ServerName my-app.domain.com 
    ServerAlias my-app 

    Include ssl/default/ssl.cfg 

    RewriteEngine On 
    ProxyRequests Off 
    ProxyPreserveHost On 
    RemoteIPHeader X-Forwarded-For 
    RequestHeader set X-FORWARDED-SSL on 
    RequestHeader set X-FORWARDED_PROTO https 


    ProxyTimeout 900 
    TimeOut 900 

    RewriteRule ^$/[R] 

    ProxyPass/http://localhost:10000/ 
    ProxyPassReverse/http://localhost:10000/ 

    RewriteRule ^/app/(.*) http://localhost:11000/$1 [P,L] 
    ProxyPassReverse /app/ http://localhost:11000 

</VirtualHost> 

重新直接正在爲初始端口,而不是交通要口11000我知道我在做someth愚蠢但我不知道是什麼。

回答

1

您需要先指定最「特定」的路徑,當使用proxypass時, 指定/ blog// app/first然後是/。如果你不這樣做ProxyPAss /將覆蓋其他。

RewriteRule ^$/[R] < - 沒有發生,因爲在虛擬主機中只有^/$會匹配,而^/$已經是/,所以它不工作,如果它真的會循環。

Aslo,不要使用mod_rewrite,因爲不需要使用mod_rewrite代理,或者至少你沒有做任何代理通行證或proxypassmatch不會獨立執行的任何操作,並且在使用ProxyPass時匹配斜槓(如果存在結尾如果沒有,則不會發生意想不到的行爲,並且如前所述,首先指定最具體的路徑:

所以,完全刪除mod_rewrite指令和:

ProxyPass /app/ http://localhost:11000/ 
ProxyPassReverse /app/ http://localhost:11000/ 

ProxyPass /blog/ http://localhost:12000/ 
ProxyPassReverse /blog/ http://localhost:12000/ 

ProxyPass/http://localhost:10000/ 
ProxyPassReverse/http://localhost:10000/