使用 .htaccess 文件(推荐,适用于虚拟主机用户)

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

apache禁止ip访问网站
(图片来源网络,侵删)

操作步骤:

  1. 定位 .htaccess 文件

    • 通过 FTP/SFTP 客户端连接到你的服务器。
    • 进入你想要设置访问限制的网站根目录(public_htmlwww)。
    • 查看是否存在 .htaccess 文件,如果存在,直接编辑它;如果不存在,新建一个文件并命名为 .htaccess
  2. 添加 DenyAllow 指令: 在 .htaccess 文件中,添加以下内容,Apache 会按照顺序读取这些指令。

    示例 1:禁止单个 IP

    apache禁止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

指令解释:

apache禁止ip访问网站
(图片来源网络,侵删)
  • Order allow,deny:设置指令的执行顺序,这个指令告诉 Apache 先执行所有 Allow 指令,再执行所有 Deny 指令,最终的规则是:如果一个 IP 被 Allow 允许,同时也被 Deny 拒绝,Deny 指令优先级更高,访问将被拒绝
  • Allow from all:允许所有 IP 地址访问。
  • Deny from [IP地址或网段]:拒绝指定的 IP 地址或网段访问。
  1. 保存文件: 保存 .htaccess 文件并上传到服务器,更改通常会在几分钟内生效,无需重启 Apache。

在 Apache 主配置文件中配置(推荐,适用于有服务器权限的用户)

如果你拥有服务器的 root 权限,直接在 Apache 的主配置文件(如 httpd.conf)或虚拟主机配置文件中进行设置是更高效、更规范的做法,这种方式对所有用户或特定虚拟主机生效,且不会因为网站迁移而丢失配置。

操作步骤:

  1. 编辑配置文件: 使用 vimnano 等编辑器打开 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) 目录下。
  2. <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>
  3. 检查配置并重启 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 模块,它提供了更清晰、更强大的访问控制语法,取代了旧的 OrderAllowDeny 指令。

操作步骤:

.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 服务器!