【nginx模块(三)】Nginx使用GEOIP模块根据ip地址限制地区

GeoIP,是一套含IP数据库的软件工具,记录了全球各个地方使用的是哪些ip地址。

本实验是基于nginx的geoip模块,处理根据ip地址来限制地区的操作。

目录

操作步骤:

第一步:先安装一个叫”epel-release”的epel源 软件包

第二步:安装geoip

第三步:跑脚本安装nginx配置

第四步:查看nginx版本以及开启了哪些功能

第五步:将geoip的软件包库导入

第六步:将geoip文档City和Country包拷贝到conf目录下

第七步:在nginx.conf文件下添加这两行

 第八步:测试


操作步骤:

第一步:先安装一个叫”epel-release”的epel源 软件包

yum install epel-release -y

EPEL (Extra Packages for Enterprise Linux)是基于Fedora的一个项目,为“红帽系”的操作系统提供额外的软件包,适用于RHEL、CentOS和Scientific Linux。

使用很简单:
这个软件包会自动配置yum的软件仓库。当然你也可以不安装这个包,自己配置软件仓库也是一样的,如果yum中没有的话,就可以通过epel增加额外的软件包。

第二步:安装geoip

yum install geoip -y

第三步:跑脚本安装nginx配置

  1. vim 后加你想要创建的文件名,名字自己设置
  2. 先导入下面脚本的内容,在直接执行你创建的脚本
  3. 下面内容放入脚本后,bash执行脚本:
vim onekey_install_shediao_v9.sh
#!/bin/bash

#解决软件的依赖关系,需要安装的软件包
yum -y install zlib zlib-devel openssl openssl-devel pcre pcre-devel gcc gcc-c++ autoconf automake make psmisc net-tools lsof vim geoip geoip-devel

#新建用户和组
# 这里可以改成自己的用户名和组,记住如果修改了,一定要确保下面的用户、组和目录全部修改成自己的
id  xiongxue || useradd xiongxue -s /sbin/nologin       

#下载nginx软件
mkdir  /xiongxue99 -p
cd /xiongxue99
wget  http://nginx.org/download/nginx-1.21.1.tar.gz

#解压软件
tar xf nginx-1.21.1.tar.gz 
#进入解压后的文件夹
cd nginx-1.21.1

#编译前的配置
./configure --prefix=/usr/local/scxiongxue99  --user=xiongxue --group=xiongxue  --with-http_ssl_module   --with-threads  --with-http_v2_module  --with-http_stub_status_module  --with-stream  --with-http_geoip_module

#如果上面的编译前的配置失败,直接退出脚本
if (( $? != 0));then
	exit
fi
#编译
make -j 2
#编译安装
make  install

#修改PATH变量
echo  "PATH=$PATH:/usr/local/scxiongxue99/sbin" >>/root/.bashrc
#执行修改了环境变量的脚本
source /root/.bashrc


#firewalld and selinux

#stop firewall和设置下次开机不启动firewalld
service firewalld stop
systemctl disable firewalld

#临时停止selinux和永久停止selinux
setenforce 0
sed  -i '/^SELINUX=/ s/enforcing/disabled/' /etc/selinux/config

#开机启动
chmod +x /etc/rc.d/rc.local
echo  "/usr/local/scxiongxue99/sbin/nginx" >>/etc/rc.local

#修改nginx.conf的配置,例如:端口号,worker进程数,线程数,服务域名

sed  -i '/worker_processes/ s/1/2/' /usr/local/scxiongxue99/conf/nginx.conf
sed  -i  '/worker_connections/ s/1024/2048/' /usr/local/scxiongxue99/conf/nginx.conf
sed  -i -r '36c \\tlisten  8080;' /usr/local/scxiongxue99/conf/nginx.conf
sed  -i -r '37c \\tserver_name www.xiongxue.com;' /usr/local/scxiongxue99/conf/nginx.conf

#killall nginx进程
#killall -9 nginx

#启动nginx
#/usr/local/scxiongxue99/sbin/nginx
bash onekey_install_shediao_v9.sh   # bash后面是你自己创建的文件名字

第四步:查看nginx版本以及开启了哪些功能

/usr/local/scxiongxue99/sbin/nginx -V   # 一定要注意自己的位置目录是否正确

第五步:将geoip的软件包库导入

这里是软件包的百度链接地址:

链接:https://pan.baidu.com/s/1lK4oD8Ke0tUMlunWbKoFag 
提取码:upll

  1. 先将软件包下载到自己电脑文件中
  2. 使用安装lrzsz,用来文件传输的
  3. 在使用unzip,来解压软件包
[root@nginx-filebeat-01 nginx]# yum install lrzsz -y    # 安装lrzsz
上次元数据过期检查:2:55:11 前,执行于 2021年07月28日 星期三 16时28分13秒。
软件包 lrzsz-0.12.20-43.el8.x86_64 已安装。
依赖关系解决。
无需任何处理。
完毕!
[root@nginx-filebeat-01 nginx]# rz     # 进入文件传输模式
@nginx-filebeat-01 nginx]# yum  install unzip -y   # 安装unzip

[root@nginx-filebeat-01 nginx]# unzip geoip.zip     # 解压geoip

 可以看到这里已经将geoip成功解压,看到City和Country包了!

第六步:将geoip文档City和Country包拷贝到conf目录下

cp GeoIP.dat GeoLiteCountry.dat /usr/local/scxiongxue99/conf/

cp GeoLiteCity.dat /usr/local/scxiongxue99/conf/

[root@nginx-filebeat-01 nginx]# cp GeoIP.dat GeoLiteCountry.dat /usr/local/scxiongxue99/conf/
[root@nginx-filebeat-01 nginx]# cp GeoLiteCity.dat /usr/local/scxiongxue99/conf/

 查看conf文件下,是否拷贝过来

第七步:在nginx.conf文件下添加这两行

cd 进入到此目录下vim nginx.conf文件

这两行是在http块下添加的:

geoip_country /usr/local/scxiongxue99/conf/GeoIP.dat; 

geoip_city /usr/local/scxiongxue99/conf/GeoLiteCity.dat; 

server块中,加入下面内容:

这两行的意思是:

如果不是长沙的ip地址,就返回页面403错误

如果不是中国的ip地址,就返回页面404错误

if ($geoip_city != 'Changsha' ){ 

return 403;

}

if ($geoip_country_code != 'CN' ){

return 404;

}

图例:

 

 第八步:测试

        先加载一下配置文件,一定要确保文件路径是不是自己的

/usr/local/scxiongxue99/sbin/nginx -s reload

 测试限制国家的IP地址:

(1)、先新增两个ip地址

[root@nginx-filebeat-01 nginx]# ip add add 8.8.8.8 dev ens33
[root@nginx-filebeat-01 nginx]# ip add add 8.8.8.9 dev ens33
[root@nginx-filebeat-01 nginx]# ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:50:56:3b:b4:f9 brd ff:ff:ff:ff:ff:ff
    inet 192.168.8.190/24 brd 192.168.8.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet 8.8.8.8/32 scope global ens33
       valid_lft forever preferred_lft forever
    inet 8.8.8.9/32 scope global ens33
       valid_lft forever preferred_lft forever
    inet 192.168.8.147/24 brd 192.168.8.255 scope global secondary dynamic ens33
       valid_lft 1828sec preferred_lft 1828sec

 (2)、在nginx.conf文件中,先把限制城市的ip代码注释掉,在重新执行上面的reload那条语句

 

 (3)、加载后,curl 监控网址,返回的是页面404,说明限制国家的ip成功!

 (4)、在对城市ip进行限制,随机写入一个别的地区的ip地址,确保是正确的ip

ip add add 添加ip  这只是临时增加的ip而已

[root@nginx-filebeat-01 nginx]# ip add add 120.227.122.104 dev ens33
[root@nginx-filebeat-01 nginx]# ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:50:56:3b:b4:f9 brd ff:ff:ff:ff:ff:ff
    inet 192.168.8.190/24 brd 192.168.8.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet 8.8.8.8/32 scope global ens33             # 国家ip
       valid_lft forever preferred_lft forever
    inet 8.8.8.9/32 scope global ens33                # 国家ip
       valid_lft forever preferred_lft forever
    inet 120.227.122.104/32 scope global ens33        # 城市ip
       valid_lft forever preferred_lft forever
    inet 192.168.8.147/24 brd 192.168.8.255 scope global secondary dynamic ens33
       valid_lft 1524sec preferred_lft 1524sec

 添加ip后,在进行上面(2)、(3)点的操作,返回403表示成功限制城市ip!

 

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 以下是一些常用的 Nginx 模块及其安装方法: 1. ngx_http_ssl_module:提供 HTTPS 支持。 安装命令:`sudo apt-get install nginx-extras` 2. ngx_http_gzip_module:开启 gzip 压缩功能,可以加快网页加载速度。 安装命令:`sudo apt-get install nginx-extras` 3. ngx_http_geoip_module:根据客户端 IP 地址,提供地理位置信息。 安装命令:`sudo apt-get install nginx-extras` 4. ngx_http_realip_module:让 Nginx 获取真实的客户端 IP 地址。 安装命令:`sudo apt-get install nginx-extras` 5. ngx_http_stub_status_module:提供 Nginx 自身状态的监控信息。 安装命令:无需安装,Nginx 默认已经安装。 6. ngx_http_limit_conn_module:限制客户端连接数。 安装命令:`sudo apt-get install nginx-extras` 7. ngx_http_limit_req_module:限制客户端请求速率。 安装命令:`sudo apt-get install nginx-extras` 以上模块都可以通过编译 Nginx 来安装。在编译 Nginx 时,可以添加相应的选项来开启或禁用这些模块。 ### 回答2: 常用的nginx模块安装有以下几种方法: 1. 源码编译安装:首先从官方网站或GitHub上下载nginx源代码包,解压后进入目录,然后执行配置命令 "./configure",根据需要添加所需模块的参数,最后执行 "make" 和 "make install" 命令进行编译和安装。 2. 使用apt-get或yum等包管理工具:使用适合的命令进行nginx的安装,如"apt-get install nginx"或"yum install nginx"。这样安装的nginx一般是编译时默认带有一些常用模块的。 3. 通过第方工具安装:有一些第方工具可以帮助自动化编译和安装nginx及其模块,例如通过使用openresty工具集、ngx_openresty或nginx-build等来实现。 4. 动态模块nginx 1.9.11及以上版本支持动态加载模块,可以通过在配置文件中使用 "load_module" 指令加载模块。首先编译动态模块,然后在配置文件中添加 "load_module" 指令指定模块文件路径即可。 在安装nginx模块时,需要注意源代码包版本与nginx版本兼容性,以及模块之间的依赖关系。根据实际需求,选择合适的安装方法进行配置和安装常用的nginx模块,如gzip模块、proxy模块、rewrite模块、ssl模块等。正确安装和配置模块可以提高nginx的性能,并扩展其功能,更好地满足网站或应用的需求。 ### 回答3: 常用的nginx模块安装一般通过以下几个步骤完成: 1. 查看已安装的nginx版本: 使用`nginx -v`或`nginx -V`命令查看已安装的nginx版本。该命令会显示nginx的版本信息,包括编译参数。 2. 下载所需的模块源码: 到nginx官方网站(http://nginx.org/)或其他第方网站上下载所需的模块源码。通常模块源码会以`.tar.gz`或`.zip`等压缩格式提供。 3. 解压模块源码: 使用相应的解压工具(例如tar或unzip)解压下载的模块源码。 4. 进入nginx源码目录: 使用命令行进入已安装的nginx源码目录。该目录通常位于`/usr/local/nginx`或`/etc/nginx`。 5. 配置编译参数: 使用文本编辑器打开nginx的配置文件`nginx.conf`,在文件中找到`./configure`命令,并在其后面添加需要安装的模块的编译参数。常用的模块包括HttpProxyModule、HttpSslModule、HttpRewriteModule等。例如,要启用HttpProxyModule,可以在`./configure`后添加`--with-http_proxy_module`参数。 6. 编译和安装: 使用命令`make`编译修改后的配置文件。编译完成后,使用命令`make install`安装编译后的nginx。 7. 验证模块安装: 使用`nginx -t`命令验证nginx配置文件是否正确。如果配置文件无误,使用`nginx -s reload`命令重新加载nginx配置。 通过以上步骤,常用的nginx模块就可以顺利安装并生效了。如果遇到编译错误或其他问题,可以参考相应的错误提示或查询相关的文档和社区讨论。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值