让apache只允许域名访问而禁止IP直接访问的实现方法

今天看到这样的一个例子,VPS的IP被人恶意绑定,流量被劫持到别的域名,从而遭到广告联盟的封杀。原理是什么呢?简单解释就是,你的网站可以通过IP直接访问,本来这没什么问题,但是如果被人恶意用别的域名解析到你的IP的话,那么你的网站就能通过别人的域名来访问了。广告联盟肯定也是跟域名绑定的,被人这么一搞,时间一长肯定会被发现域名不符,于是就整个杯具了。

如何解决这个问题?让人只能通过域名来访问网站,而不能通过IP来直接访问。
方法:修改Apache配置文件httpd.conf

如果你的Apache开通了虚拟主机,则需要修改conf/extra/httpd-vhosts.conf文件。如何判断Apache是否开通了虚拟主机,在配置文件httpd.conf中搜索,若有类似如下的选项的,则开启了虚拟主机。#为注释。

# Virtual hosts
Include conf/extra/httpd-vhosts.conf

若是开通了虚拟主机,则需要在httpd-vhosts.conf中修改配置如下;
若没有开通虚拟主机,则可以直接在httpd.conf文件最后面,加入以下代码:

NameVirtualHost XXX.XXX.XXX.XXX:80

<virtualhost XXX.XXX.XXX.XXX:80>
ServerName XXX.XXX.XXX.XXX
<Location />
Order Allow,Deny
Deny from all
</Location>
</virtualhost>

<virtualhost XXX.XXX.XXX.XXX:80>
ServerName yourdomain.com
DocumentRoot /var/www/
</virtualhost>

其中XXX.XXX.XXX.XXX为你的IP地址,第一处virtualhost配置为拒绝IP的任何访问请求,返回403错误。第二处的virtualhost配置为允许通过yourdomain.com这个域名访问,网站主目录为/var/www/(假设这是你的网站主目录)。

发表评论

电子邮件地址不会被公开。 必填项已用*标注