如何用Nginx实现对城市以及指定IP的访问限制?

这篇具有很好参考价值的文章主要介绍了如何用Nginx实现对城市以及指定IP的访问限制?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.前言

在【如何用Nginx代理MySQL连接,并限制可访问IP】一文中,我们实现了通过Nginx代理MySQL连接,并限制了指定IP才能通过Nginx进行连接,以提高数据安全性。

该场景适用于根据具体的IP地址来进行访问限制,假如我们要上线一个新的功能,但是只想在某些地区进行小规模的测试,就无能为力了。

nginx限制地区访问,nginx,nginx

我们可以通过添加第三方模块ngx_http_geoip2_module来实现,其实Nginx也提供了ngx_http_geoip_module,至于我们为什么不使用它,我们后续揭晓。

2.限制指定IP

我们先来回顾一下,如何通过指定IP来进行访问限制。

Nginx提供了ngx_http_access_modulengx_stream_access_module模块,前者针对http请求,后者针对stream连接,它们的指令非常简单,仅包含allowdeny指令,唯一区别就是作用域不同。

我们这里就以ngx_http_access_module模块为例。

1)allow

该指令设置指定的IP允许访问。可以和deny指令配合使用

作用域:http, server, location, limit_except

语法:allow address | CIDR | unix: | all;

示例:

# 允许192.168.110.1访问
allow 192.168.110.1;

# 允许192.168.110.1到192.168.255.254
allow 192.168.110.0/16;

# 允许192.168.110.1到192.168.110.254
allow 192.168.110.0/24;

# 允许所有的IP访问
allow all;

2)deny

该指令设置指定的IP禁止访问。可以和allow指令配合使用。

作用域:http, server, location, limit_except

语法:deny address | CIDR | unix: | all;

# 禁止192.168.110.1访问
deny 192.168.110.1;

# 禁止192.168.110.1到192.168.255.254
deny 192.168.110.0/16;

# 禁止192.168.110.1到192.168.110.254
deny 192.168.110.0/24;

# 禁止所有的IP访问
deny all;

3)配置示例

禁止所有的IP访问,192.168.110.100除外。

http {
	server {
		listen 80;
		server_name localhost;
		allow 192.168.110.100;
		deny all;
	}
}

🔔Tips:如果指定了allow,需要配合deny使用,否则就是允许所有的IP地址访问。

3.限制国家/城市

前面我们提到了Nginx也提供了ngx_http_geoip_module来实现根据国家/城市进行访问限制。

官当文档:https://nginx.org/en/docs/http/ngx_http_geoip_module.html

nginx限制地区访问,nginx,nginx

从上图可以得知该模块需要maxmind的数据库,并且格式为.dat,那好,我们来看看maxmind提供的数据,如下图:

nginx限制地区访问,nginx,nginx

其格式为.mmdb,与该模块的数据格式不匹配,因此我们使用第三方模块ngx_http_geoip2_module

下载地址:https://github.com/leev/ngx_http_geoip2_module/archive/refs/heads/master.zip

3.1 安装maxminddb library

首先,我们需要安装用于读取.mmdb的文件的依赖。

apt install libmaxminddb0 libmaxminddb-dev mmdb-bin

3.2 构建模块

对于添加第三方模块,我们需要在configure时使用--add-module来实现。例如:

./configure --sbin-path=/usr/local/nginx/nginx --conf-path=/usr/local/nginx/nginx.conf --pid-path=/usr/local/nginx/nginx.pid --with-stream --add-module=/home/stone/nginx-1.22.1/module/ngx_http_geoip2_module

其余步骤,可参照【Nginx基本命令&不停机版本升级】一文进行,这里不再赘述。

3.3 GEOIP数据下载

下载地址(需注册账号):https://dev.maxmind.com/geoip/geolite2-free-geolocation-data

国家库:

nginx限制地区访问,nginx,nginx

城市库:

nginx限制地区访问,nginx,nginx

通过解压缩得到GeoLite2-Country.mmdbGeoLite2-City.mmdb数据库文件。

3.4 配置

3.4.1 初体验

在进行配置之前,我们先通过第一步安装的依赖库来体验一下。

mmdblookup --file /usr/local/nginx/GeoLite2-City.mmdb --ip 183.195.99.161

可以看到,其识别出这是一个来自上海的IP地址。

nginx限制地区访问,nginx,nginx

3.4.2 配置示例

接下来,我们开始配置。

http {
	include       mime.types;
	default_type  application/octet-stream;

	# 自定义日志格式
	log_format geoip '$http_x_forwarded_for_temp - $remote_user [$time_local] - $request - $status - $geoip2_country_name_en - $geoip2_city_name_en';

	geoip2 /usr/local/nginx/GeoLite2-Country.mmdb {
		auto_reload 5m;
		$geoip2_metadata_country_build metadata build_epoch;
		$geoip2_country_code source=$http_x_forwarded_for_temp country iso_code;
		$geoip2_country_name_en source=$http_x_forwarded_for_temp country names en;
		$geoip2_country_name_zh source=$http_x_forwarded_for_temp country names zh-CN;
	}

	geoip2 /usr/local/nginx/GeoLite2-City.mmdb {
		auto_reload 5m;
		$geoip2_city_name_en source=$http_x_forwarded_for_temp city names en;
		$geoip2_city_name_zh source=$http_x_forwarded_for_temp city names zh-CN;
	}

	server {

		listen       80;
		server_name  localhost;

		access_log logs/geoip.log geoip;
		default_type text/html;
		# 正则匹配取反
		if ($geoip2_city_name_en !~ 'Shanghai'){
			return 403 "<h1>Forbidden!</h1><p>You don't have permission to access the URL on this server.</p>";
		}

		location / {
			return 200 '<p>Real IP:  $http_x_forwarded_for_temp</p><p>Country:  $geoip2_country_name_en</p><p>City:  	$geoip2_city_name_en</p>';
		}
	}
}

🔔Tips:由于我们这里没有外网环境,因此使用$http_x_forwarded_for_temp变量来模拟,只需在请求头中加入X-Forwarded-For-Temp字段即可。实际环境还是使用$http_x_forwarded_for变量用来获取请求的真实IP。

3.4.3 实战

1)发起请求,X-Forwarded-For-Temp=183.195.99.161,上海IP,响应码200。

nginx限制地区访问,nginx,nginx

2)发起请求,X-Forwarded-For-Temp=221.192.127.124,唐山IP,响应码403。

nginx限制地区访问,nginx,nginx

3)日志记录:

nginx限制地区访问,nginx,nginx

以上就是Nginx限制可访问IP的全部内容,Nginx是多模块化的,还有很多高级功能,我们后面继续探索。文章来源地址https://www.toymoban.com/news/detail-752632.html

到了这里,关于如何用Nginx实现对城市以及指定IP的访问限制?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Ubuntu 限制 指定端口和IP 访问

    限制端口和IP的时候 要注意别自己登陆不进去了,要不就惨了。 只允许指定的IP访问服务器的指定端口:22 只允许访问的ip: 192.168.1.1 192.168.1.2 192.168.1.3,禁止其他IP访问 注意: 上面执行的命令是有先后顺序的,一定要先禁止端口访问,在允许指定的IP访问。 然后 执行 

    2023年04月08日
    浏览(28)
  • 基于Springboot 限制IP访问指定的网址

    添加一个简单的白名单,然后只有白名单上面的 IP 才能访问网站,否则不能访问 这是只是一个很简单的实现方法 首先:在 application.yml 配置 IP 白名单 想要引用到配置文件里面的 String 数组,如果使用普通的 @Value 是不行的,必须使用其他方法 步骤一:创建一个实体类 这样配

    2024年01月18日
    浏览(37)
  • Jtti:Ubuntu怎么限制指定端口和IP访问

    在 Ubuntu 系统中,可以使用防火墙规则来限制特定的端口和IP访问。常用的防火墙管理工具是 iptables,以下是使用 iptables 来限制指定端口和IP访问的步骤: 安装 iptables: 如果系统中没有安装 iptables,可以使用以下命令进行安装: sudo apt-get update sudo apt-get install iptables 添加规则

    2024年02月12日
    浏览(32)
  • Oracle11gR2限制指定IP访问

    Oracle数据库版本: Oracle11gR2 安装位置: E:appproduct 编辑文件:E:appproduct11.2.0dbhome_1NETWORKADMINsqlnet.ora 配置说明 配置后,如果非允许的主机IP连接数据库时,会提示 ORA-12537: TNS:lost contact 或中文提示 ORA-12537: TNS:连接关闭 E:appproduct11.2.0dbhome_1NETWORKADMINtnsnames.ora 1. PL/SQL

    2024年01月16日
    浏览(40)
  • windows服务器限制特定ip访问指定端口(服务器ip白名单)

    有些时候我们需要限制特定的ip白名单来访问服务器的指定端口,来防止dos攻击或其他危险访问,我们可以通过防火墙来实现这一需求,下面一起看一下: ps:开启防火墙可能有些端口会无法访问,比如80、443等,需要添加入栈规则才能恢复,参考下面步骤的入站规则 新建入站

    2024年02月05日
    浏览(46)
  • Nginx 限流模块:限制高并发和IP访问频率

    Nginx 是我们常用的负载均衡和反向代理服务器,并发性能非常优秀。 但是在并发量极大的情况下,必要限流措施还是需要的,Nginx 的有对应的模块插件可通过简单配置来完成这个功能。 1、添加 limit_conn_zone 这个变量只能在http使用。

    2023年04月25日
    浏览(74)
  • Nginx 禁止IP访问 只允许域名访问,以及Nginx防盗链设置

           我们在使用的时候会遇到很多的恶意IP攻击,这个时候就要用到Nginx 禁止IP访问了。今天要在Nginx上设置禁止通过IP访问服务器,只能通过域名访问,这样做是为了避免别人把未备案的域名解析到自己的服务器IP而导致服务器被断网。        下面我们就先看看Ngi

    2024年02月11日
    浏览(39)
  • MySQL系列:限制IP访问,通过授权的方式实现

    一、允许用户所有IP访问 更改  mysql  数据库里的  user  表里的  host  项,从 localhost\\\" 改成 % 即可。有两种方式可以实现。 第一种:直接修改 user  表 第二种:授权的方式 二、限制某个IP或者IP段访问 建议通过授权的方式实现。 注意: 1、注意授权后必须FLUSH PRIVILEGES;否则无

    2024年02月12日
    浏览(28)
  • 使用Golang实现HTTP代理突破IP访问限制

    在当今互联网时代,网站和服务商为了维护安全性和保护用户隐私,常常会对特定的IP地址进行封锁或限制。但是,有时候我们可能需要访问这些被限制的网站或服务。为了突破这种限制,我们可以使用HTTP代理来隐藏真实的客户端IP地址,从而绕过限制。 本文将介绍如何使用

    2024年02月07日
    浏览(33)
  • 阿里云的白名单规则如何实现IP限制和访问控制?

    阿里云的白名单规则如何实现IP限制和访问控制? [本文由阿里云代理商 [聚搜云] 撰写] 随着企业在云计算领域的深入应用,网络安全问题日益凸显。阿里云提供了一种名为“白名单”的规则,帮助用户实现IP限制和访问控制。本文将详细阐述阿里云白名单规则的原理及操作方

    2024年02月10日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包