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

这4个模块可以实现正反向代理,负载均衡,url重写。

去除这一行的注释

Include conf/extra/httpd-vhosts.conf

然后所有的虚拟主机的配置都在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>

解释

· 第一个<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>

这样的设置并不能生效。

只能如下设置

<Directory C:/webroot>
    Order deny,allow
    Deny from all
</Directory>
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值