如何限制只能通过域名访问网站(Apache)
背景
最近突发奇想,怎么让基于Apache服务的网站只能通过域名访问?也就是说,在浏览器地址栏直接输入IP就不允许访问。这样有个好处就是,必须是知道域名的用户才能访问网站内容,如果只是通过某种方式捕获到IP,不让他知道网站运行着什么内容。
基础
我的服务器环境是Ubuntu 16.04,其他版本的系统也差不多,只要是Apache 2.x版本就行。并且,网站支持了HTTPS访问。
首先,确保Apache服务器已经启用了 mod_rewrite
模块:
1 | sudo a2enmod rewrite |
配置
接下来,我们就通过修改配置来实现需求。先找到配置文件:
1 | cd /etc/apache2/sites-available/ |
此目录下一般有 000-default.conf
和 default-ssl.conf
这两个文件,因为支持了HTTPS,所以我们直接修改后者:
1 | <IfModule mod_ssl.c> |
大家的其他配置基本都差不多,主要是追加最后那3行配置,其作用是检查HTTP请求的主机头是否是IP地址(由数字和点组成),如果是,则返回403 Forbidden响应,从而阻止通过IP地址访问网站。
顺便也贴一下我的非HTTPS配置(即 000-default.conf
),这样完整一点:
1 | <VirtualHost *:80> |
配置搞定以后,再次重启一下Apache服务。
测试
此时再尝试用IP访问网页,浏览器就会出现403错误信息:
Forbidden
You don’t have permission to access this resource.
Apache/2.4.18 (Ubuntu) Server at 123.123.123.123 Port 443
这样就对了。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Pig Cat!
评论