⭐⭐⭐ Spring Boot 项目实战 ⭐⭐⭐ Spring Cloud 项目实战
《Dubbo 实现原理与源码解析 —— 精品合集》 《Netty 实现原理与源码解析 —— 精品合集》
《Spring 实现原理与源码解析 —— 精品合集》 《MyBatis 实现原理与源码解析 —— 精品合集》
《Spring MVC 实现原理与源码解析 —— 精品合集》 《数据库实体设计合集》
《Spring Boot 实现原理与源码解析 —— 精品合集》 《Java 面试题 + Java 学习指南》

摘要: 原创出处 blog.csdn.net/m0_54563444 「無熵」欢迎转载,保留摘要,谢谢!


🙂🙂🙂关注微信公众号:【芋道源码】有福利:

  1. RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表
  2. RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址
  3. 您对于源码的疑问每条留言都将得到认真回复。甚至不知道如何读源码也可以请教噢。
  4. 新的源码解析文章实时收到通知。每周更新一篇左右。
  5. 认真的源码交流微信群。

allow、deny

deny和allow指令属于ngx_http_access_module,nginx默认加载此模块,所以可直接使用。

在Nginx配置文件中定义允许访问系统的IP地址。假设您的Nginx配置文件位于 /etc/nginx/nginx.conf 或 /etc/nginx/sites-available/default。

直接配置文件中添加

server {
listen 80;
server_name your_domain_or_ip;

# 设置白名单
location / {
allow 192.168.1.1; # 允许特定IP访问
allow 192.168.1.2;
allow 192.168.1.3;
allow 192.168.1.4;
allow 192.168.1.5;
allow 192.168.1.6;
deny all; # 拒绝所有其他IP访问
}

# 设置最高权限的运行维护IP
location /admin {
allow 192.168.1.7; # 最高权限的运行维护IP
deny all;
}

# 设置有限权限的维护IP
location /limited {
allow 192.168.1.8; # 有限权限的维护IP1
allow 192.168.1.9; # 有限权限的维护IP2
deny all;
}
}

通过读取文件IP配置白名单

location /{
include /home/whitelist.conf;
#默认位置路径为/etc/nginx/ 下,
#如直接写include whitelist.conf,则只需要在/etc/nginx目录下创建whitelist.conf
deny all;
}

在/home/目录下创建whitelist.conf,并写入需要加入白名单的IP,添加完成后查看如下:

cat /home/whitelist.conf

#白名单IP
allow 10.1.1.10;
allow 10.1.1.11;

ngx_http_geo_module

默认情况下,一般nginx是有加该模块的,ngx_http_geo_module,参数需设置在位置在http模块中。此模块可设置IP限制,也可设置国家地区限制。位置在server模块外即可。

配置文件直接添加

geo $ip_list {
default 0;
#设置默认值为0
192.168.1.0/24 1;
10.1.0.0/16 1;
}
server {
listen 8081;
server_name 192.168.152.100;

location / {
root /var/www/test;
index index.html index.htm index.php;
if ( $ip_list = 0 ) {
#判断默认值,如果值为0,可访问,这时上面添加的IP为黑名单。
#白名单,将设置$ip_list = 1,这时上面添加的IP为白名单。
proxy_pass http://192.168.152.100:8081;
}
}

读取文件IP配置

geo $ip_list {
default 0;
#设置默认值为0
include ip_white.conf;
}
server {
listen 8081;
server_name 192.168.152.100;

location / {
root /var/www/test;
index index.html index.htm index.php;
if ( $ip_list = 0 ) {
return 403;
#限制的IP返回值为403,也可以设置为503,504其他值。
#建议设置503,504这样返回的页面不会暴露nginx相关信息,限制的IP看到的信息只显示服务器错误,无法判断真正原因。
}
}
}

国家地区IP限制访问

安装ngx_http_geoip_module模块

ngx_http_geoip_module,参数需设置在位置在http模块中。nginx默认情况下不构建此模块,应使用 --with-http_geoip_module 配置参数启用它。对于ubuntu系统来说,直接安装 nginx-extras组件,包括几乎所有的模块。

sudo apt install nginx-extras

对于centos系统,安装模块。

yum install nginx-module-geoip

下载 IP 数据库

ngx_http_geoip_module模块依赖于IP数据库,所有数据在此数据库中读取,需要下载ip库(dat格式)。下载同时包括Ipv4和Ipv6的country、city版本。

#下载国家IP库,解压并移动到nginx配置文件目录,
sudo wget https://dl.miyuru.lk/geoip/maxmind/country/maxmind.dat.gz
gunzip maxmind.dat.gz
sudo mv maxmind.dat /etc/nginx/GeoCountry.dat

sudo wget https://dl.miyuru.lk/geoip/maxmind/city/maxmind.dat.gz
gunzip maxmind.dat.gz
sudo mv maxmind.dat /etc/nginx/GeoCity.dat

配置nginx

geoip_country /etc/nginx/GeoCountry.dat;
geoip_city /etc/nginx/GeoCity.dat;

server {
listen 80;
server_name 144.11.11.33;

location / {
root /var/www/html/;
index index.html index.htm;
if ($geoip_country_code = CN) {
return 403;
#中国地区,拒绝访问。返回403页面
}
}
}

国家相关参数

  • $geoip_country_code:两位字符的英文国家码。例如:CN, US
  • $geoip_country_code3:三位字符的英文国家码。例如:CHN, USA
  • $geoip_country_name:国家英文全称。例如:China, United States

城市相关参数

  • $geoip_city_country_code:两位字符的英文国家码。例如:CN, US
  • $geoip_city_country_code3:三位字符的英文国家码。例如:CHN, USA
  • $geoip_city_country_name:国家英文全称。例如:China, United States
  • $geoip_region:地区代码,通常是两位数的数字。例如:杭州是02, 上海是23
  • $geoip_city:城市的英文名称。例如:Hangzhou
  • $geoip_postal_code:城市的邮政编码。国内这字段可能为空
  • $geoip_city_continent_code:大洲代码。国内通常是AS
  • $geoip_latitude:纬度
  • $geoip_longitude:经度
文章目录
  1. 1. allow、deny
    1. 1.0.1. 直接配置文件中添加
    2. 1.0.2. 通过读取文件IP配置白名单
  • 2. ngx_http_geo_module
    1. 2.0.1. 配置文件直接添加
    2. 2.0.2. 读取文件IP配置
  • 3. 国家地区IP限制访问
    1. 3.0.1. 安装ngx_http_geoip_module模块
    2. 3.0.2. 下载 IP 数据库
    3. 3.0.3. 配置nginx