天天看點

apache虛拟主機轉發配置域名預設跳轉首頁

以下是昨天工作碰到的問題場景:

我們開發了一個網站(J2EE的),放在was裡面跑(雙機),前端用apache轉發。現假設該網站的通路位址為:http://192.168.1.100:9080/hello和http://192.168.1.101:9080/hello

昨天系統上線,意味着以後要用一個統一的域名通路(假設為:www.somedomain.com),我們用apache做代理伺服器,将域名指向apache,再由apache轉發至後端的兩台was伺服器上。

apache的配置如下:

<VirtualHost *:80>
        ServerAdmin [email protected]
        ServerName www.somedomain.com
        ErrorLog "logs/hello-error_log"
        CustomLog "logs/hello-access_log" common

	Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED
	<Proxy balancer://hellocluster>
                BalancerMember http://192.168.1.100:9080 route=was100
		BalancerMember http://192.168.1.101:9080 route=was101
                ProxySet stickysession=ROUTEID
        </Proxy>

        ProxyPass /hello balancer://hellocluster/hello
        ProxyPassReverse /hello balancer://hellocluster/hello
</VirtualHost>
           

通過上面的配置,我們可以這樣通路了:http://www.somedomain.com/hello

但這還太麻煩了,為什麼,因為我們要的是直接輸入域名www.somedomain.com就能通路http://www.somedomain.com/hello,而不要手工的在位址欄上輸入上下文才能通路。

經過查找資料,決定使用apache的rewrite來達到目的,于是從網上找來了一段代碼,經過修改如下:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^ www.somedomain.com
RewriteRule ^/(.*)$  http://www.somedomain.com/hello
           

将這段代碼添加到上述的VirtualHost配置中後,用浏覽器通路,浏覽器報錯:循環重定向。

仔細看下rewrite的配置,如果按照上面那樣配,确實會導緻循環重定向。于是修改如下

RewriteEngine On
RewriteCond %{HTTP_HOST} ^ www.somedomain.com
RewriteRule ^/$  http://www.somedomain.com/hello
           

即去掉了最後一行配置中(.*)

再次測試,成功。

完整配置如下:

<VirtualHost *:80>
        ServerAdmin [email protected]
        ServerName www.somedomain.com
        ErrorLog "logs/hello-error_log"
        CustomLog "logs/hello-access_log" common

	Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED
	<Proxy balancer://hellocluster>
                BalancerMember http://192.168.1.100:9080 route=was100
		BalancerMember http://192.168.1.101:9080 route=was101
                ProxySet stickysession=ROUTEID
        </Proxy>

        ProxyPass /hello balancer://hellocluster/hello
        ProxyPassReverse /hello balancer://hellocluster/hello

        RewriteEngine On
	RewriteCond %{HTTP_HOST} ^ www.somedomain.com
	RewriteRule ^/$  http://www.somedomain.com/hello
</VirtualHost>