【10.31】nginx 访问控制
1.28-1.36 nginx 访问控制
1、Nginx访问控制 —— deny、allow
Nginx 的 deny 和 allow 指令是由 ngx_http_access_module 模块提供,Nginx 安装默认内置了该模块。
除非在安装时有指定 --without-http_access_module
- 语法: allow/deny address | CIDR | unix: | all
它表示,允许/拒绝某个 ip 或者一个 ip 段访问。
如果指定 unix:,那将允许 socket 的访问。
注意: unix 在是1.5.1中新加入的功能。
在 nginx 中,allow 和 deny 的规则是按顺序执行的。
- 示例
示例1:
location /
{
allow 192.168.0.0/24;
allow 127.0.0.1;
deny all;
}
说明: 这段配置值允许 192.168.0.0/24 网段和 127.0.0.1 的请求,其他来源 IP 全部拒绝。
访问测试:
[root@alexis-01 ~]# curl -x192.168.194.128:80 www.1.com/123 -I
HTTP/1.1 403 Forbidden
Server: nginx/1.16.1
Date: Sun, 03 Nov 2019 12:06:48 GMT
Content-Type: text/html
Content-Length: 153
Connection: keep-alive
[root@alexis-01 ~]# curl -x127.0.0.1:80 www.1.com/123 -I
HTTP/1.1 404 Not Found
Server: nginx/1.16.1
Date: Thu, 31 Dec 2019 12:06:58 GMT
Content-Type: text/html
Content-Length: 153
Connection: keep-alive
示例2:
location ~ "admin"
{
allow 192.168.194.0/24;
deny all;
}
说明: 访问的 uri 中包含 admin 的请求,只允许112.249.97.112 这个 IP 的请求。
访问测试:
[root@alexis-01 ~]# curl -x192.168.194.128:80 www.1.com/123/admin -I
HTTP/1.1 404 Not Found
Server: nginx/1.16.1
Date: Thu, 31 Dec 2019 12:11:13 GMT
Content-Type: text/html
Content-Length: 153
Connection: keep-alive
[root@alexis-01 ~]# curl -x127.0.0.1:80 www.1.com/123/admin -I
HTTP/1.1 403 Forbidden
Server: nginx/1.16.1
Date: Thu, 31 Dec 2019 12:11:25 GMT
Content-Type: text/html
Content-Length: 153
Connection: keep-alive
2、基于 location 的访问控制
在生产环境中,我们会对某些特殊的请求进行限制,比如对网站的后台进行限制访问。
这就用到了location配置。
示例1:
location /alexis/
{
deny all;
}
说明: 针对 /alexis/ 目录,全部禁止访问,这里的 deny all 可以改为 return 403.
示例2:
location ~ ".bak|\.htp"
{
return 403;
}
说明: 访问的 uri 中包含 .bak 字样的或者包含 .htp 的直接返回 403 状态码
.bak 的 . 表示任意字符,.htp 表示包含 .htp 字符的。
访问测试:
- www.1.com/123.bak
- www.1.com/alexis/123/.htpalskdjf
[root@alexis-01 ~]# curl -x127.0.0.1:80 www.1.com/123.bak -I
HTTP/1.1 403 Forbidden
Server: nginx/1.16.1
Date: Thu, 31 Dec 2019 11:56:00 GMT
Content-Type: text/html
Content-Length: 153
Connection: keep-alive
[root@alexis-01 ~]# curl -x127.0.0.1:80 www.1.com/123.1bak -I
HTTP/1.1 403 Forbidden
Server: nginx/1.16.1
Date: Thu, 31 Dec 2019 11:56:08 GMT
Content-Type: text/html
Content-Length: 153
Connection: keep-alive
[root@alexis-01 ~]# curl -x127.0.0.1:80 www.1.com/123.b1ak -I
HTTP/1.1 404 Not Found
Server: nginx/1.16.1
Date: Thu, 31 Dec 2019 11:57:44 GMT
Content-Type: text/html
Content-Length: 153
Connection: keep-alive
[root@alexis-01 ~]# curl -x127.0.0.1:80 www.1.com/123/.htpalsd -I
HTTP/1.1 403 Forbidden
Server: nginx/1.16.1
Date: Thu, 31 Dec 2019 11:56:39 GMT
Content-Type: text/html
Content-Length: 153
Connection: keep-alive
[root@alexis-01 ~]# curl -x127.0.0.1:80 www.1.com/123/.htdpalsd -I
HTTP/1.1 404 Not Found
Server: nginx/1.16.1
Date: Thu, 31 Dec 2019 11:56:50 GMT
Content-Type: text/html
Content-Length: 153
Connection: keep-alive
示例3:
location ~ (data|cache|tmp|image|attachment).*\.php$
{
deny all;
}
说明: 请求的 uri 中包含 data、cache、tmp、image、attachment 并且以 .php 结尾的,全部禁止访问。
如果网站目可写,那么久不应该支持解析 php。
访问测试:
- www.1.com/ale