网站建设
Apache VirtualHost 虚拟主机 ProxyPass 反向代理 RewriteEngine url 重写
前言
之前使用过的方法是 apache 的 mod_proxy_ajp 方式代理 tomcat。但是在 windows 下我始终没有配置成功,前几天使用过 nginx 反向代理后,今天想尝试一下用apache 反射代理 tomcat。这一次使用的模块是:
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule rewrite_module modules/mod_rewrite.so
- 1
- 2
- 3
- 4
这4个模块可以实现正反向代理,负载均衡,url重写。
去除这一行的注释
Include conf/extra/httpd-vhosts.conf
- 1
然后所有的虚拟主机的配置都在httpd-vhosts.conf文件中配置。
其它详细参见:Apache配置正向代理与反向代理
完成后的配置文件:
<VirtualHost *:80>
#ServerAdmin 管理员邮箱
ServerName localhost
ServerAlias localhost
ErrorLog "logs/localhost-error.log"
CustomLog "logs/localhost-access.log" common
<Directory C:/webroot>
Order deny,allow
Deny from all
</Directory>
</VirtualHost>
<VirtualHost *:80>
#ServerAdmin 管理员邮箱
ServerName bill.vpigirl.com
ServerAlias bill.vpigirl.com
ErrorLog "logs/bill.vpigirl.com-error.log"
CustomLog "logs/bill.vpigirl.com-access.log" common
ProxyRequests Off
ProxyPreserveHost on
#反向代理设置
ProxyPass / balancer://cluster/ stickysession=jsessionid nofailover=Off
ProxyPassReverse / balancer://cluster/
<Proxy balancer://cluster>
BalancerMember http://localhost:18080/ loadfactor=1 retry=10
ProxySet lbmethod=bybusyness
</Proxy>
</VirtualHost>
<VirtualHost *:80>
#ServerAdmin 管理员邮箱
ServerName *.vpigirl.com
ServerAlias *.vpigirl.com
ErrorLog "logs/vpigirl.com-error.log"
CustomLog "logs/vpigirl.com-access.log" common
RewriteEngine on
RewriteMap lowercase int:tolower
RewriteMap vhost txt:C:/website/Apache22/vhost.map
RewriteCond ${lowercase:%{SERVER_NAME}} ^(.+)$
RewriteCond ${vhost:%1} ^(C:/.*)$
RewriteRule ^/(.*)$ %1/$1
</VirtualHost>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
解释
· 第一个<VirtualHost *:80>的ServerName 是 localhost,也即是,本地访问或者没有定义的域名,或者ip访问都会经过这里。这里设置为禁止访问,当然也可以直接在外面直接禁止。
· 第二个<VirtualHost *:80>的ServerName 是 bill.vpigirl.com ,也即是,只有是这个域名的时候,才会用这个域名。
· 第三个<VirtualHost :80>的ServerName 是 .vpigirl.com ,也即是,它会匹配所有的以 .vpigirl.com 结尾的所有域名。但是在这个 VirtualHost 里面,使用了 url 重写,这个重写也是之前使用过的方法。只不过,以前是直接写在 http.conf 中的,而这一次是写在 VirtualHost 里面。这样它就只在这个 VirtualHost 中生效。
注:但是这里有个问题,当使用localhost,ip,或者使用没有定义的域名时,会默认去匹配第一个规则。
在这里遇到一个奇怪的问题:
DocumentRoot "C:/webroot"
<Directory />
Order deny,allow
Deny from all
</Directory>
- 1
- 2
- 3
- 4
- 5
这样的设置并不能生效。
只能如下设置
<Directory C:/webroot>
Order deny,allow
Deny from all
</Directory>