nginx精准禁止特定国家或者地区IP访问

2024-06-19 15:44

本文主要是介绍nginx精准禁止特定国家或者地区IP访问,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、安装依赖

dnf -y install gcc-c++ libtool gd-devel pcre pcre-devel openssl openssl-devel zlib zlib-devel libmaxminddb-devel pcre-devel zlib-devel gcc gcc-c++ make git

2、获取NGINX安装包并安装

wget https://nginx.org/download/nginx-1.26.1.tar.gz
git clone https://github.com/leev/ngx_http_geoip2_module.git
groupadd nginx 
useradd -d /home/nginx -g nginx -s /sbin/nginx nginx./configure --prefix=/usr/local/nginx \--user=nginx \--group=nginx \--with-pcre \--with-http_ssl_module \--with-http_v2_module \--with-http_realip_module \--with-http_addition_module \--with-http_sub_module \--with-http_dav_module \--with-http_flv_module \--with-http_mp4_module \--with-http_gunzip_module \--with-http_gzip_static_module \--with-http_random_index_module \--with-http_secure_link_module \--with-http_stub_status_module \--with-http_auth_request_module \--with-http_image_filter_module \--with-http_slice_module \--with-mail \--with-threads \--with-file-aio \--with-stream \--with-mail_ssl_module \--with-stream_ssl_module \--add-module=/usr/local/nginx/ngx_http_geoip2_modulemake && make install

参数说明

–prefix=/nginxtest: 指定nginx的安装目录为/nginxtest,这意味着nginx将安装到该目录下。
–user=nginx: 指定nginx运行时的用户为nginx,这是为了增加安全性,以防止nginx以超级用户权限运行。
–group=nginx: 指定nginx运行时的用户组为nginx,与上述相似,也是为了增加安全性。
–with-pcre: 启用PCRE(Perl Compatible Regular Expressions)库,用于支持正则表达式。
–with-http_ssl_module: 启用HTTP SSL模块,支持HTTPS协议。
–with-http_v2_module: 启用HTTP/2模块,支持HTTP/2协议。
–with-http_realip_module: 启用HTTP RealIP模块,允许nginx在代理模式下获取真实的客户端IP地址。
–with-http_addition_module: 启用HTTP Addition模块,允许在响应中添加内容。
–with-http_sub_module: 启用HTTP Substitution模块,允许在响应中替换内容。
–with-http_dav_module: 启用HTTP DAV(WebDAV)模块,支持WebDAV协议。
–with-http_flv_module: 启用HTTP FLV模块,支持Flash视频流。
–with-http_mp4_module: 启用HTTP MP4模块,支持MP4视频流。
–with-http_gunzip_module: 启用HTTP GUNZIP模块,用于解压缩响应中的gzip压缩数据。
–with-http_gzip_static_module: 启用HTTP Gzip Static模块,用于在发送静态文件时压缩数据。
–with-http_random_index_module: 启用HTTP Random Index模块,允许nginx在目录中选择一个随机文件作为索引。
–with-http_secure_link_module: 启用HTTP Secure Link模块,用于生成带有安全签名的URL。
–with-http_stub_status_module: 启用HTTP Stub Status模块,允许监控nginx的状态信息。
–with-http_auth_request_module: 启用HTTP Auth Request模块,允许在需要认证时向另一个服务器发送认证请求。
–with-http_image_filter_module: 启用HTTP Image Filter模块,允许对图像进行处理。
–with-http_slice_module: 启用HTTP Slice模块,允许nginx按指定大小切片响应。
–with-mail: 启用邮件代理服务器功能。
–with-threads: 启用线程支持。
–with-file-aio: 启用文件异步IO支持。
–with-stream: 启用TCP/UDP流代理功能。
–with-mail_ssl_module: 启用邮件SSL模块,支持SSL加密的邮件传输。
–with-stream_ssl_module: 启用流SSL模块,支持SSL加密的TCP/UDP流。
--add-module=/usr/local/ngx_http_geoip2_module: 添加额外的模块ngx_http_geoip2_module,该模块用于GeoIP2地理定位功能

3、先下载 IP 地理位置数据库文件

wget https://cdn.jsdelivr.net/gh/Hackl0us/GeoIP2-CN@release/Country.mmdb

由于 IP 广播泛滥,所以 GeoIP 并不是那么准确,如果觉得 GeoIP 库太旧了,需要自行到官网下载最新版,将配置的路径改一下即可。
GeoIP不光可以屏蔽国家,还可以屏蔽身份、城市,
数据库文件下载网页地址 http://dev.maxmind.com/geoip/geoip2/geolite2/
http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.tar.gz
http://geolite.maxmind.com/download/geoip/database/GeoLite2-Country.tar.gz
http://geolite.maxmind.com/download/geoip/database/GeoLite2-ASN.tar.gz

自动更新数据库程序 - https://dev.maxmind.com/geoip/geoipupdate/
源码github地址 - https://github.com/maxmind/geoipupdate
数据操作API库资源网址 https://dev.maxmind.com/geoip/geoip2/downloadable/#MaxMind_APIs

4、加载 IP 地理位置数据库

修改NGINX配置文件

http {# 加载 GeoIP 数据库文件geoip2 /path/to/GeoLite2-Country.mmdb { # 指定 GeoIP2 数据库文件路径auto_reload 60m; # 每 60 分钟自动重新加载数据库文件$geoip2_metadata_country_build metadata build_epoch; # 获取数据库元数据$geoip2_data_country_code country iso_code; # 获取 IP 所属国家的 ISO 代码}
}

5、配置拦截规则

在配置文件中添加拦截规则,指定你要阻止的国家或地区。以下是一个示例:
修改NGINX配置文件

http {# 设置拦截规则map $geoip2_data_country_code $allowed_country {default no; # 默认情况下不允许访问CN yes; # 指定中国 IP 地址不被拦截HK yes; # 指定香港 IP 地址不被拦截}
}

6、应用拦截规则

在你的服务器块或虚拟主机配置中,使用 if 指令结合上述定义的 map 指令来应用拦截规则:
修改NGINX配置文件

server {listen 80;server_name example.com;if ($allowed_country = yes) { # 如果 IP 地址所属国家被标记为不允许访问return 403; # 返回 403 Forbidden 错误页面}# 其他配置项
}

重新加载 Nginx

完成配置后,重新加载或重启 Nginx 以使更改生效:

nginx -s reload

这样配置后,Nginx 将会拦截来自指定国家或地区的 IP 请求,并返回 403 Forbidden 错误页面。

nginx限制身份和城市访问后续补充。

这篇关于nginx精准禁止特定国家或者地区IP访问的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1075446

相关文章

如何自定义Nginx JSON日志格式配置

《如何自定义NginxJSON日志格式配置》Nginx作为最流行的Web服务器之一,其灵活的日志配置能力允许我们根据需求定制日志格式,本文将详细介绍如何配置Nginx以JSON格式记录访问日志,这种... 目录前言为什么选择jsON格式日志?配置步骤详解1. 安装Nginx服务2. 自定义JSON日志格式各

Nginx指令add_header和proxy_set_header的区别及说明

《Nginx指令add_header和proxy_set_header的区别及说明》:本文主要介绍Nginx指令add_header和proxy_set_header的区别及说明,具有很好的参考价... 目录Nginx指令add_header和proxy_set_header区别如何理解反向代理?proxy

Linux系统中配置静态IP地址的详细步骤

《Linux系统中配置静态IP地址的详细步骤》本文详细介绍了在Linux系统中配置静态IP地址的五个步骤,包括打开终端、编辑网络配置文件、配置IP地址、保存并重启网络服务,这对于系统管理员和新手都极具... 目录步骤一:打开终端步骤二:编辑网络配置文件步骤三:配置静态IP地址步骤四:保存并关闭文件步骤五:重

Nginx配置location+rewrite实现隐性域名配置

《Nginx配置location+rewrite实现隐性域名配置》本文主要介绍了Nginx配置location+rewrite实现隐性域名配置,包括基于根目录、条件和反向代理+rewrite配置的隐性... 目录1、配置基于根目录的隐性域名(就是nginx反向代理)2、配置基于条件的隐性域名2.1、基于条件

Linux配置IP地址的三种实现方式

《Linux配置IP地址的三种实现方式》:本文主要介绍Linux配置IP地址的三种实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录环境RedHat9第一种安装 直接配置网卡文件第二种方式 nmcli(Networkmanager command-line

使用Dify访问mysql数据库详细代码示例

《使用Dify访问mysql数据库详细代码示例》:本文主要介绍使用Dify访问mysql数据库的相关资料,并详细讲解了如何在本地搭建数据库访问服务,使用ngrok暴露到公网,并创建知识库、数据库访... 1、在本地搭建数据库访问的服务,并使用ngrok暴露到公网。#sql_tools.pyfrom

Ubuntu中Nginx虚拟主机设置的项目实践

《Ubuntu中Nginx虚拟主机设置的项目实践》通过配置虚拟主机,可以在同一台服务器上运行多个独立的网站,本文主要介绍了Ubuntu中Nginx虚拟主机设置的项目实践,具有一定的参考价值,感兴趣的可... 目录简介安装 Nginx创建虚拟主机1. 创建网站目录2. 创建默认索引文件3. 配置 Nginx4

Nginx如何进行流量按比例转发

《Nginx如何进行流量按比例转发》Nginx可以借助split_clients指令或通过weight参数以及Lua脚本实现流量按比例转发,下面小编就为大家介绍一下两种方式具体的操作步骤吧... 目录方式一:借助split_clients指令1. 配置split_clients2. 配置后端服务器组3. 配

Linux虚拟机不显示IP地址的解决方法(亲测有效)

《Linux虚拟机不显示IP地址的解决方法(亲测有效)》本文主要介绍了通过VMware新装的Linux系统没有IP地址的解决方法,主要步骤包括:关闭虚拟机、打开VM虚拟网络编辑器、还原VMnet8或修... 目录前言步骤0.问题情况1.关闭虚拟机2.China编程打开VM虚拟网络编辑器3.1 方法一:点击还原VM

Nginx实现前端灰度发布

《Nginx实现前端灰度发布》灰度发布是一种重要的策略,它允许我们在不影响所有用户的情况下,逐步推出新功能或更新,通过灰度发布,我们可以测试新版本的稳定性和性能,下面就来介绍一下前端灰度发布的使用,感... 目录前言一、基于权重的流量分配二、基于 Cookie 的分流三、基于请求头的分流四、基于请求参数的分