前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >nginx入门详解(四)- 访问控制

nginx入门详解(四)- 访问控制

作者头像
用户8639654
修改2021-08-19 18:05:48
5470
修改2021-08-19 18:05:48
举报
文章被收录于专栏:云计算运维

这一章就结合实例来看下通过修改配置文件,实现简单的防火墙功能。

这个功能的实现依靠nginx的access模块,这个模块在我们编译nginx时会默认编译进nginx的二进制文件中。

语法:

代码语言:javascript
复制
Syntax:	allow address | CIDR | unix: | all;
Default:	—
Context:	http, server, location, limit_except
Syntax:	deny address | CIDR | unix: | all;
Default:	—
Context:	http, server, location, limit_except

allow: 允许访问的IP或者网段。

deny: 拒绝访问的ip或者网段。

从语法上看,它允许配置在http指令块中,server指令块中还有locatio指令块中,这三者的作用域有所不同。

如果配置在http指令块中,将对所有server(虚拟主机)生效;

配置在server指令块中,对当前虚拟主机生效;

配置在location指令块中,对匹配到的目录生效。

ps: 如果server指令块,location指令块没有配置限制指令,那么将会继承http的限制指令,但是一旦配置了会覆盖http的限制指令。或者说作用域小的配置会覆盖作用域大的配置

实例一:

在http指令块下配置单ip限制;

代码语言:javascript
复制
http {
    include       mime.types;
    default_type  application/octet-stream;
    #限制10.10.10.14这个ip访问
    deny 10.10.10.14;
    ...
}

ps: 配置完记得重载配置文件

代码语言:javascript
复制
/usr/local/nginx/sbin/nginx -s reload

在10.10.10.14机器上访问:

在自己服务上访问:

代码语言:javascript
复制
[root@localhost ~]# curl -I 10.10.10.17
HTTP/1.1 200 OK
Server: nginx/1.16.0
Date: Mon, 22 Jul 2019 02:24:19 GMT
Content-Type: text/html

可以看到只对14这个ip生效了,如果有配置虚拟主机,那么这个ip将都不能访问。因为现在还没讲到虚拟主机,所以先不配置了。

如果想让整个网段都不能访问呢?只需要将这个ip改为网段即可。

代码语言:javascript
复制
http {
    include       mime.types;
    default_type  application/octet-stream;
    #将ip改为网段
    deny 10.10.10.0/24;
    ...
}

在自己服务器上访问;

代码语言:javascript
复制
[root@localhost ~]# curl -I 10.10.10.17
HTTP/1.1 403 Forbidden
Server: nginx/1.16.0

在10.10.10.14机器上访问:

可以看到都不能访问了,对整个网段的限制已生效。

实例二:

在server指令块配置,配置方法都是一样的,只是作用范围不同。

代码语言:javascript
复制
 server {
        listen       80;
        server_name  localhost;
        deny 10.10.10.14;
        ...
    }

在自己服务器上访问:

代码语言:javascript
复制
[root@localhost ~]# curl -I 10.10.10.17
HTTP/1.1 200 OK
Server: nginx/1.16.0
Date: Mon, 22 Jul 2019 02:45:06 GMT

在10.10.10.14机器上访问:

限制网段同上,这里就不在演示了。

实例三:

在location指令块配置访问控制。这种配置是最多的,因为有时候我们要限制用户对某些文件或者目录的访问,这些文件通常是比较重要的或者私密的。

代码语言:javascript
复制
location /secret {
                deny 10.10.10.14;
        }

创建目录以及测试文件:
[root@localhost ~]# mkdir -p /usr/local/nginx/html/secret
[root@localhost ~]# echo "this is secret" > /usr/local/nginx/html/secret/index.html

在本机访问:

代码语言:javascript
复制
[root@localhost ~]# curl 10.10.10.17/secret/index.html
this is secret

在10.10.10.14上访问:

白名单设置:

现在我们讲到的都是限制某个IP或者网段,这些形式是黑名单式的,默认放行,指定的ip或者网段被限制。但如果你搭建的服务只针对于某些IP或者网段开放,那么可以使用白名单设置,默认拒绝,指定的放行。

实例:

代码语言:javascript
复制
location /secret {
                allow 10.10.10.14;
                deny all;
        }

在本机访问:

代码语言:javascript
复制
[root@localhost ~]# /usr/local/nginx/sbin/nginx -s reload
[root@localhost ~]# curl 10.10.10.17/secret/index.html
<html>
<head><title>403 Forbidden</title></head>
<body>
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx/1.16.0</center>
</body>
</html>

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 语法:
  • 实例一:
  • 实例二:
  • 实例三:
  • 白名单设置:
相关产品与服务
轻量应用服务器
轻量应用服务器(TencentCloud Lighthouse)是新一代开箱即用、面向轻量应用场景的云服务器产品,助力中小企业和开发者便捷高效的在云端构建网站、Web应用、小程序/小游戏、游戏服、电商应用、云盘/图床和开发测试环境,相比普通云服务器更加简单易用且更贴近应用,以套餐形式整体售卖云资源并提供高带宽流量包,将热门软件打包实现一键构建应用,提供极简上云体验。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档