使用 .htaccess 文件(推荐,适用于虚拟主机用户)
这是最简单、最灵活的方法,尤其适用于使用虚拟主机、没有服务器 root 权限的用户,你只需要在网站的根目录下创建或修改 .htaccess 文件即可。

操作步骤:
-
定位
.htaccess文件:- 通过 FTP/SFTP 客户端连接到你的服务器。
- 进入你想要设置访问限制的网站根目录(
public_html或www)。 - 查看是否存在
.htaccess文件,如果存在,直接编辑它;如果不存在,新建一个文件并命名为.htaccess。
-
添加
Deny和Allow指令: 在.htaccess文件中,添加以下内容,Apache 会按照顺序读取这些指令。示例 1:禁止单个 IP
(图片来源网络,侵删)# 禁止单个IP地址 192.168.1.100 访问 Order allow,deny Allow from all Deny from 192.168.1.100
示例 2:禁止多个 IP
# 禁止多个IP地址访问 Order allow,deny Allow from all Deny from 192.168.1.100 Deny from 10.0.0.50 Deny from 203.0.113.10
示例 3:禁止一个 IP 段
# 禁止 192.168.1.0/24 网段(即 192.168.1.1 到 192.168.1.254)的所有IP访问 Order allow,deny Allow from all Deny from 192.168.1
示例 4:禁止一个更宽的 IP 段
# 禁止 192.168.0.0/16 网段的所有IP访问 Order allow,deny Allow from all Deny from 192.168
指令解释:

Order allow,deny:设置指令的执行顺序,这个指令告诉 Apache 先执行所有Allow指令,再执行所有Deny指令,最终的规则是:如果一个 IP 被Allow允许,同时也被Deny拒绝,Deny指令优先级更高,访问将被拒绝。Allow from all:允许所有 IP 地址访问。Deny from [IP地址或网段]:拒绝指定的 IP 地址或网段访问。
- 保存文件:
保存
.htaccess文件并上传到服务器,更改通常会在几分钟内生效,无需重启 Apache。
在 Apache 主配置文件中配置(推荐,适用于有服务器权限的用户)
如果你拥有服务器的 root 权限,直接在 Apache 的主配置文件(如 httpd.conf)或虚拟主机配置文件中进行设置是更高效、更规范的做法,这种方式对所有用户或特定虚拟主机生效,且不会因为网站迁移而丢失配置。
操作步骤:
-
编辑配置文件: 使用
vim或nano等编辑器打开 Apache 的主配置文件或虚拟主机配置文件。- 主配置文件通常位于:
/etc/apache2/httpd.conf(Debian/Ubuntu) 或/etc/httpd/conf/httpd.conf(CentOS/RHEL)。 - 虚拟主机配置文件通常在
/etc/apache2/sites-available/(Debian/Ubuntu) 或/etc/httpd/conf.d/(CentOS/RHEL) 目录下。
- 主配置文件通常位于:
-
在
<VirtualHost>或<Directory>块中添加指令:场景 A:针对整个网站(虚拟主机) 在你的
<VirtualHost *:80>块内添加以下指令:<VirtualHost *:80> ServerName example.com DocumentRoot /var/www/example.com # ... 其他配置 ... <Directory "/var/www/example.com"> # 禁止指定IP访问 Order allow,deny Allow from all Deny from 192.168.1.100 Deny from 10.0.0 </Directory> </VirtualHost>场景 B:针对网站下的某个目录 如果你只想禁止 IP 访问网站的
/admin目录,可以这样配置:<Directory "/var/www/example.com/admin"> Order allow,deny Allow from all Deny from 192.168.1.100 </Directory> -
检查配置并重启 Apache: 保存文件后,在终端执行以下命令检查配置语法是否正确,然后重启 Apache 使配置生效。
# 检查配置语法 (Debian/Ubuntu) sudo apache2ctl configtest # 检查配置语法 (CentOS/RHEL) sudo apachectl configtest # 如果显示 Syntax OK,则重启服务 # Debian/Ubuntu sudo systemctl restart apache2 # CentOS/RHEL sudo systemctl restart httpd
使用 mod_rewrite 模块(功能更强大)
mod_rewrite 是一个非常强大的 URL 重写引擎,也可以用来实现 IP 访问控制,这种方法语法更灵活,可以结合正则表达式实现更复杂的逻辑。
操作步骤:
在 .htaccess 文件或主配置文件中,确保启用了 mod_rewrite 模块,然后添加以下规则:
<IfModule mod_rewrite.c>
RewriteEngine On
# 如果客户端IP是 192.168.1.100,则返回 403 Forbidden 错误
RewriteCond %{REMOTE_ADDR} ^192\.168\.1\.100$
RewriteRule .* - [F]
# 如果客户端IP属于 10.0.0.0/8 网段,则返回 403 Forbidden 错误
RewriteCond %{REMOTE_ADDR} ^10\.
RewriteRule .* - [F]
</IfModule>
指令解释:
RewriteEngine On:开启mod_rewrite功能。RewriteCond:设置重写条件。%{REMOTE_ADDR}是一个服务器变量,表示客户端的 IP 地址。^192\.168\.1\.100$:这是一个正则表达式,精确匹配 IP 地址168.1.100,点号 在正则中是特殊字符,需要用\转义。^10\.:匹配所有以 开头的 IP 地址,即0.0.0/8网段。
RewriteRule .* - [F]:- 匹配所有请求的 URL。
- 表示不进行重定向,直接应用接下来的标志。
[F]:Forbidden标志,告诉服务器立即向客户端返回 403 Forbidden 错误。
使用 mod_authz_host 模块(现代 Apache 推荐方式)
对于较新版本的 Apache (2.4+),推荐使用 mod_authz_host 模块,它提供了更清晰、更强大的访问控制语法,取代了旧的 Order、Allow、Deny 指令。
操作步骤:
在 .htaccess 或主配置文件中使用 Require 指令。
示例 1:禁止单个 IP
<RequireAll>
Require all granted
Require not ip 192.168.1.100
</RequireAll>
示例 2:禁止多个 IP 和一个网段
<RequireAll>
Require all granted
Require not ip 192.168.1.100
Require not ip 10.0.0.50
Require not ip 203.0.113.0/24
</RequireAll>
指令解释:
<RequireAll> ... </RequireAll>:定义一个要求组,组内所有条件必须都满足才能访问。Require all granted:允许所有访问(作为默认基础)。Require not ip [IP或网段]:明确拒绝指定的 IP 或网段访问,这是最直接、最容易理解的语法。
总结与对比
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
.htaccess |
简单、灵活,无需重启服务器,适合虚拟主机。 | 性能略低于主配置文件,.htaccess 过多会影响性能。 |
虚拟主机用户,或需要对单个网站进行特殊配置。 |
| 主配置文件 | 性能最好,配置集中,管理方便。 | 需要 root 权限,修改后需重启服务器。 | 拥有服务器管理员权限,需要对整个服务器或多个虚拟主机进行统一管理。 |
mod_rewrite |
功能极其强大,可结合正则实现复杂逻辑。 | 语法相对复杂,可读性稍差。 | 需要非常复杂的 IP 匹配规则,或与 URL 重写逻辑紧密结合的场景。 |
mod_authz_host (Require) |
现代 Apache (2.4+) 推荐方式,语法清晰、直观。 | 仅适用于 Apache 2.4 及以上版本。 | 新建或维护 Apache 2.4+ 项目的首选方法。 |
最佳实践建议:
- 如果你是虚拟主机用户:首选 方法一(
.htaccess)。 - 如果你是服务器管理员:首选 方法二(主配置文件) 或 方法四(
mod_authz_host),因为它们更高效、更规范。 - 如果你需要处理非常复杂的 IP 规则:可以考虑 方法三(
mod_rewrite)。
希望这些信息能帮助你成功配置 Apache 服务器!
