要在宝塔面板中设置 Nginx 仅允许中国 IP 访问 /xmlrpc.php,核心是借助ngx_http_geoip2_module模块搭配 IP 数据库识别 IP 所属国家,再通过站点配置限制访问。以下是详细步骤:
一、安装 geoip2 依赖与模块
该模块是 Nginx 实现国家 IP 识别的关键,需先安装依赖并下载模块源码,操作通过宝塔终端执行:
-
- 安装依赖库:若服务器是 CentOS 系统,执行命令
yum install libmaxminddb-devel -y;若为 Ubuntu/Debian 系统,执行apt install libmaxminddb0 libmaxminddb-dev mmdb-bin -y。
- 下载模块源码:执行
cd /tmp && git clone https://github.com/leev/ngx_http_geoip2_module.git,将模块下载到 /tmp 目录。
- 移动模块到固定路径:执行
mv /tmp/ngx_http_geoip2_module /usr/local/,方便后续编译调用。
-
二、重新编译 Nginx 添加模块
宝塔默认安装的 Nginx 不含 geoip2 模块,需重新编译集成:
- 登录宝塔面板,进入软件商店,找到已安装的 Nginx,点击右侧卸载(卸载仅移除程序,配置文件不会丢失)。
- 重新安装 Nginx,安装时点击编译安装,在弹出的编译参数框中添加
--add-module=/usr/local/ngx_http_geoip2_module,然后开始安装。
- 安装完成后,可通过宝塔终端执行
nginx -V,若输出中包含上述模块路径,说明集成成功。
-
三、下载中国 IP 数据库
需要 MMDB 格式的 IP 数据库来识别 IP 所属国家,推荐从 MaxMind 官网获取:
- 访问MaxMind 官网注册账号,登录后进入Download Databases。
- 下载GeoLite2 Country数据库(免费版),得到 GeoLite2-Country.mmdb 文件。(备用下载2022版)
- 在服务器上创建数据库目录,执行
mkdir -p /usr/local/nginx/conf/geoip,将下载的 mmdb 文件上传到该目录(可通过宝塔的文件管理功能上传)。
-
四、配置站点仅允许中国 IP 访问 /xmlrpc.php
进入宝塔站点的 Nginx 配置文件,添加 IP 识别和访问限制规则:
- 宝塔面板中进入网站,找到目标站点,点击右侧设置,选择配置文件。
- 在配置文件的
http块内添加数据库关联配置,代码如下:
geoip2 /usr/local/nginx/conf/geoip/GeoLite2-Country.mmdb {
auto_reload 60m; # 60分钟自动刷新数据库
$geoip2_metadata_country_build metadata build_epoch;
$geoip2_data_country_code country iso_code; # 获取国家简称,中国为CN
}
map $geoip2_data_country_code $allow_access {
default 0; # 默认拒绝
CN 1; # 中国IP标记为允许
}
在server块内添加针对 /xmlrpc.php 的 location 规则,代码如下:
location ~* /xmlrpc.php$ {
if ($allow_access != 1) {
return 403; # 非中国IP返回403禁止访问
}
# 保留原有xmlrpc.php的处理逻辑,如PHP解析配置
fastcgi_pass unix:/tmp/php-cgi-74.sock; # 此处需匹配站点的PHP版本对应的sock路径
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
-
- 注意,fastcgi_pass 的路径要和站点当前 PHP 版本匹配,可复制配置文件中其他 location 块的对应参数。
-
验证配置并生效
- 配置完成后点击保存,回到宝塔终端执行
nginx -t,检查配置语法是否正确。
- 若提示语法正常,执行
nginx -s reload重载 Nginx 配置,规则即可生效。
- 测试效果:用国内 IP 访问 /xmlrpc.php 可正常响应,用境外 IP 访问则返回 403 错误。
文章评论