Linux运维之路


nginx服务实战05: nginx连接和并发限制 nginx用户认证

admin 2019-07-18 330浏览 0条评论
首页/正文
分享到: / / / /

利用limit_conn模块限制并发连接数

配置方法:

  1. http区块 开启一块共享内存
  2. 添加连接数限制

定义共享内存:

http模块定义

http {
...
limit_conn_zone $binary_remote_addr zone=addr:10m;
...

server或 localtion区块中应用

server {
...
...
  location /{
    limit_conn_status 500;      ---定义状态码
    limit_conn_log_level warn;  --- 定义日志级别 
    limit_rate 50;				--- 定义发送速率 b
    limit_conn addr 1;          --- 定义并发连接数
  }
...
...
}

限制并发连接数配置:

vim /application/nginx/conf/nginx.conf

worker_processes  1;                                                  
events {
    worker_connections  1024;
}

 http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    limit_conn_zone $binary_remote_addr zone=addr:10m;  ##开辟一块共享内存
  server {
      listen 80;
      server_name 10.0.0.20;
      root    html/leilei01;
      index   index.html index.htm;
      error_log logs/leilei_error.log info;           ## 配置日志级别
      location /{
        limit_conn_status 500;                        ## 自定义返回码
        limit_conn_log_level warn;                    ## 配置日志级别为 warn
        limit_rate 50;                     ## 最高速度限制为每秒50字节 方便第二个访问出错的出现
        limit_conn addr 1;                            ## 限制最高连接数为 1 
      }
  }

curl 同时访问:

[root@leilei conf]# curl 10.0.0.20
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

第二台访问:

[root@leilei ~]# curl 10.0.0.20
<html>
<head><title>500 Internal Server Error</title></head>
<body>
<center><h1>500 Internal Server Error</h1></center>
<hr><center>nginx/1.16.0</center>
</body>
</html>

限制用户请求 利用limit_req模块限制请求次数

生效阶段: NGX_HTTP_PREACCESS_PHASE

模块: http_limit_req_module

默认编译到了nginx中,如果需要取消该模块 通过重新编译添加参数 --without-http_limit_req_module 禁用此功能

算法: leaky bucket 算法

生效范围:

  • 全部的woker进程(基于共享内存)
  • 进入preaccess阶段前不生效
http {
limit_conn_zone $binary_remote_addr zone=addr:10m;
limit_req_zone $binary_remote_addr zone=one:10m rate=2r/m;
server {
  ...
  location /{
  	limit_conn_status 500;
    limit_conn_log_level warn;
	limit_req zone=one burst=3 nodelay;   ##限制3次
	limit_req zone=one;	指定共享内存使用 one
  }
  ...
  }
}

思考: 同时打开限制连接数和限制请求数,哪个先生效? 模块放在之前和之后决定限制的优先级

access模块 限制IP请求 allow deny

模块名: http_access_module

默认编译进了nginx 通过重新编译添加 --without-http_access_module禁用此功能 他在deny之后也会生效

用法: ​ deny ip地址;allow ip地址

allow deny 限制可以出现在 http server location limit_except 模块中

allow例子:

默认拒绝优先,一旦被拒绝,后续有allow也不允许访问

location / {
	deny 192.168.1.1;
	allow 192.168.1.0/24;
	allow 10.1.1.0/16;
}

限制不仅仅可以是ip或网段,还可以是 mac地址 如: allow 2001:0b8h::/32;

通过auth_basrc模块实现http用户密码认证

模块名: http_access_auth_basrc_module

默认编译到了nginx中 取消模块可重新编译中添加: --without-http_auth_basic_module 禁用此功能 可以应用在 http server location limit_except 区块中

配置中默认不开启此功能 如需开启: auth_basic on;

实现用户密码认证需要 apache中的 httpd-tools 依赖包

添加认证用户:
htpasswd -b 1.pass leilei 123

用户帐号密码格式:
name1:passwd1
name2:passwd2

查看创建好的用户:
[root@leilei html]# cat 1.pass 
leilei:$apr1$1wFjtPA3$Qxhz.3cQhNW0jaEWmd7T3/

在nginx中添加用户认证

第一步:添加httpd认证工具包

yum install -y httpd-tools

第二步:创建认证用户和密码:

进入网页目录:
cd /application/nginx/html
htpasswd -b 1.pass leilei 123

[root@leilei html]# ls -lrt
total 12
-rw-r--r-- 1 root root 612 Jul  7 18:48 index.html
-rw-r--r-- 1 root root 494 Jul  7 18:48 50x.html
drwxr-xr-x 2 root root  24 Jul 10 18:20 www.chenleilei.net
drwxr-xr-x 2 root root  24 Jul 18 14:31 leilei01
-rw-r--r-- 1 root root  45 Jul 18 15:55 1.pass   ##认证配置文件

第三步:nginx的区块中添加配置

location /{
##location模块下添加用户密码认证                           
      satisfy any;
      auth_basic "test auth_basic";
      auth_basic_user_file /application/nginx/html/1.pass;
      deny all;
##添加用户密码认证
}

##注意 该配置可以在http` `server` `location` `limit_except` 区块中配置

第四步: 访问测试

输入密码后:

最后修改:2019-07-18 16:25:36 © 著作权归作者所有
如果觉得我的文章对你有用,请随意赞赏
扫一扫支付

上一篇

发表评论

评论列表

还没有人评论哦~赶快抢占沙发吧~