利用rewrite规则限制虚拟主机的ip访问

八 20th, 2010 | Filed under WEB服务器, 系统架构及硬件

需求比标题复杂些,如下:
(1)在dns注册 *.test.com的域名指向一台服务器,如:210.87.12.5
(2)在这台服务器上,安装有web程序,该程序可以根据用户输入的二级域名跳转到该用户的产品主页
(3)对于非法的域名指向,进行rewrite处理(返回404错误,否则一经被查,断电处理)
(4)用户访问合法的域名但不是https连接的,跳转到https页面(即若是80端口则跳转到443端口)
(5)对于指定的二级域名,只准许某个(些)ip访问

针对各个需求作如下处理:
需求1:简单,在dns注册泛域名即可

需求2:纯粹的程序处理,略过

需求3:rewrite规则如下:

RewriteCond %{HTTP_HOST} !^abc|^apple|^banana|^demo\.test\.com [NC]
RewriteRule ^/$ default [R=404]
即:不是我上面列出的域名,其他的都返回404错误。这里注意每一项的前面都要加^

需求4:rewrite规则如下:

RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^/?(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R]
需求5:rewrite规则如下:

RewriteCond %{REMOTE_ADDR} !^124.11.12.141 [OR]
RewriteCond %{REMOTE_ADDR} !^124.11.12.142 [NC]
RewriteCond %{HTTP_HOST} ^abc\.test\.com [NC]
RewriteRule ^/$ default [R=404]
即:如果用户的ip不是124.11.12.141或124.11.12.142但却访问了 abc.jobkoo.com 则直接返回404错误,也就是说只有列出的ip可以访问。

注意:
(1)由于本机同时开放了80和443端口,因此在设置rewrite规则时需要在两端口的虚拟主机配置中同时添加。
(2)rewrite是有顺序的,我这里的顺序如下:

# 限制ip访问域名
RewriteCond %{REMOTE_ADDR} !^124.11.12.141 [OR]
RewriteCond %{REMOTE_ADDR} !^124.11.12.142 [NC]
RewriteCond %{HTTP_HOST} ^abc\.test\.com [NC]
RewriteRule ^/$ default [R=404]

# 拒绝非法域名指向
RewriteCond %{HTTP_HOST} !^abc|^apple|^banana|^demo\.test\.com [NC]
RewriteRule ^/$ default [R=404]

# 非443端口跳转
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^/?(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R]

Del.icio.us Google书签 Digg Live Bookmark Technorati Furl Yahoo书签 Facebook 百度搜藏 新浪 ViVi 365Key 网摘 天极网摘 和讯网摘 博拉网 POCO 网摘 饭否 QQ 书签 Digbuzz 我挖网 Mister Wong
目前还没有任何评论.