Welcome to LHIDC !

如何在Apache中设置允许或拒绝访问的网站

Apache是世界上使用最广泛的网络服务器之一,为托管网站提供了一个强大而灵活的平台。

您在管理香港服务器上的网站时,您可能需要控制谁可以访问某些资源或整个网站。例如,您可能希望阻止特定 IP 地址或仅允许从特定区域或网络进行访问。Apache 使用一项名为“访问控制”的功能来实现这一点。

在本指南中,我们将介绍使用简单、人性化、可读的配置允许或拒绝访问Apache中的网站的步骤。

Apache 访问控制基础知识

Apache 使用两个主要指令来控制访问:

Require:用于允许特定用户、IP 地址或组访问。

Deny和Allow(在更高版本中已弃用):以前在旧版本的 Apache 中使用,但被Require指令取代。

在较新版本的 Apache(2.4 及更高版本)中,该Require指令是管理访问控制的主要方式。

步骤1:编辑Apache配置文件

根据您的系统,Apache 配置文件可以在不同的位置找到。

例如:

Ubuntu/Debian:/etc/apache2/apache2.conf或在虚拟主机文件内(例如/etc/apache2/sites-available/your-site.conf)。
CentOS/RHEL:/etc/httpd/conf/httpd.conf或虚拟主机文件(例如/etc/httpd/conf.d/your-site.conf)。

使用nano或vi等文本编辑器来编辑这些文件。

步骤2:使用 Require 指令设置访问控制

该Require指令指定允许或拒绝谁访问。让我们看一下允许和拒绝访问的示例。

示例 1:拒绝来自特定 IP 地址的访问

要拒绝来自特定 IP 地址的访问,请使用Require not指令。

例如,要阻止 IP 192.168.1.100:

<Directory /var/www/html>
    Require all granted
    Require not ip 192.168.1.100
</Directory>

在这种情况下:

Require all granted:允许访问所有 IP 地址。
Require not ip 192.168.1.100:拒绝访问指定的 IP 地址。

示例 2:仅允许访问特定 IP 地址

如果您希望仅允许访问特定 IP 或 IP 范围,请使用以下命令:

<Directory /var/www/html>
    Require ip 192.168.1.0/24
</Directory>

这里只允许访问192.168.1.0至192.168.1.255Require ip 192.168.1.0/24范围内的 IP (常见的本地网络范围)。

示例 3:拒绝除特定 IP 之外的所有人访问

您可能希望拒绝除特定 IP 或 IP 组之外的所有人访问。

<Directory /var/www/html>
    Require all denied
    Require ip 192.168.1.10
</Directory>

在这种情况下:

Require all denied:阻止所有人访问。
Require ip 192.168.1.10:仅允许访问 IP 地址192.168.1.10。

示例 4:通过主机名限制访问

您还可以根据主机名限制访问。例如,如果您希望仅允许特定域(如example.com)的用户访问,则可以使用:

<Directory /var/www/html>
    Require host example.com
</Directory>

这将只允许来自的访问者example.com访问该网站。

步骤 3:在 Apache 中屏蔽整个国家

要阻止来自特定国家/地区的流量,您需要安装一个名为的附加模块mod_maxminddb,该模块使用 GeoIP 数据库根据访问者的 IP 地址确定国家/地区。

在 Linux 中安装 mod_maxminddb

要使用mod_maxminddb模块,您需要安装并配置它。

在Ubuntu/Debian上,运行:

sudo apt update
sudo apt install libmaxminddb0 libmaxminddb-dev mmdb-bin apache2-dev
git clone https://github.com/maxmind/mod_maxminddb.git
cd mod_maxminddb
sudo apxs -i -a -c mod_maxminddb.c

在CentOS/RHEL上,运行:

sudo yum install epel-release
sudo yum install libmaxminddb libmaxminddb-devel mmdb-bin httpd-devel
git clone https://github.com/maxmind/mod_maxminddb.git
cd mod_maxminddb
sudo apxs -i -a -c mod_maxminddb.c

下载 MaxMind GeoIP 数据库

MaxMind 提供了一个免费的 GeoLite2 数据库,我们可以使用它根据 IP 地址确定国家。

tar -xvzf GeoLite2-Country.tar.gz
sudo mkdir -p /usr/share/GeoIP
sudo mv GeoLite2-Country.mmdb /usr/share/GeoIP/

配置 Apache 以使用 mod_maxminddb
现在,我们需要告诉 Apache 使用mod_maxminddb模块和 GeoIP 数据库。

sudo nano /etc/apache2/apache2.conf   # On Ubuntu/Debian
sudo nano /etc/httpd/conf/httpd.conf  # On CentOS/RHEL

添加以下配置以启用mod_maxminddb并指定 GeoIP 数据库的路径:

<IfModule mod_maxminddb.c>
    MaxMindDBEnable On
    MaxMindDBFile COUNTRY_DB /usr/share/GeoIP/GeoLite2-Country.mmdb
    MaxMindDBEnv MM_COUNTRY_CODE COUNTRY_DB/country/iso_code
</IfModule>

添加基于国家/地区的访问控制

现在模块已设置完毕,您可以使用它根据访问者的国家/地区阻止或允许访问。例如,要阻止来自中国 (CN)和俄罗斯 (RU)的用户的访问,请在 Apache 虚拟主机文件中使用此配置:

<Directory /var/www/html>
    SetEnvIf MM_COUNTRY_CODE CN BlockCountry
    SetEnvIf MM_COUNTRY_CODE RU BlockCountry
    Require all granted
    Require not env BlockCountry
</Directory>

添加新配置后,重新启动 Apache 以应用更改:

sudo systemctl restart apache2 # 在 Ubuntu/Debian 上
sudo systemctl restart httpd # 在 CentOS/RHEL 上

要确认模块是否正确安装,您可以检查mod_maxminddbApache 中是否加载:

apachectl -M | grep maxminddb

如果加载正确,您应该会看到类似以下内容的输出:

maxminddb_module (shared)

结论

控制对您香港服务器上的网站的访问是管理 Web 服务器安全性和功能的重要方面。Apache 的访问控制功能允许您根据 IP 地址、主机名甚至地理位置允许或拒绝访问。

即刻开始数字化旅程

立即注册您的独立服务器,在全球托管您的应用程序或在线业务

Copyright © 2025 LHIDC. All Rights Reserved.