请求与连接区别

  1. connection是连接:即常说的tcp连接,三次握手,状态机
  2. request是请求:例如http请求,无状态的协议
  3. request是必须建立在connection之上

connection限制客户端并发连接数

Nginx默认是有这个模块,可以通过--without-http_limit_conn_module 禁用

由于限制客户端需要每个worker子进程对客户端有标识,所以需要用到共享内存。

常用指令
  • limit_conn_zone

    1. 上下文 http
    2. 写法 limit_conn_zone $binary_remote_addr zone=addr:10m
    3. 通常1m共享内存空间大小都能维护3万多并发连接 10m已经很大了 addr是名称
    4. binary_remote_addr 相比 remote_addr 空间使用更少 前者4 后面7-8字节
  • limit_conn_status

    1. 上下文:httpserverlocation
    2. limit_conn_status code
    3. 默认状态码 limit_conn_status 503 超过连接数后返回的状态码
  • limit_conn_log_level

    1. 上下文:httpserverlocation
    2. limit_conn_ log_level info|notice|warn|error
    3. 默认error 当限速行为发生时会产生日志
  • limit_conn

    1. limit_conn 上面的名称 限速多少个客户端并发连接
  • 限制的只是并发连接才会出现。

request限制客户端请求平均速率

写法跟conn一样

Nginx默认是有这个模块,可以通过--without-http_limit_req_module 禁用

由于限制客户端需要每个worker子进程对客户端有标识,所以需要用到共享内存。

使用 限流算法是leaky_bucket算法,漏桶算法,使流量平滑进入

  1. limit_req_zone $binary_remote_addr zone=addr:10m rate=2r/m
  2. 一分钟处理两个请求
  3. limit_req_log_level 限速日志级别
  4. limit_conn_status 状态码
  5. limit_req zone=addr burst=7 nodelay;
  6. 设置了 rate 可以不设置burst=7 nodelay 连续请求

限定指定ip 访问

  1. allow 允许
  2. deny 拒绝 会直接返回403 forbidden
  3. httpserverlocationlimit_except 上下文
  4. 可以组合编写,从上到下范围筛选
  5. location/{
  6. deny 192.168.1.1;
  7. allow 192.168.1.0/24;
  8. allow 10.1.1.0/16;
  9. allow 2001:0db8::/32;
  10. deny all;
  11. }

限制特定用户访问auth_basic模块

默认已经有了的模块:可以通过--without-http_auth_basic_module禁用

  1. 语法:auth_basic 浏览器提示语|off;
  2. 默认值:auth_basic off;
  3. 上下文:httpserverlocationlimit_except
  4. 语法:auth_basic_user_file 配置的密钥文件绝对地址;
  5. 上下文:httpserverlocationlimit_except

制作用户名密码

  1. 可执行程序:htpasswd
  2. 所属软件包:httpd-tools
  3. 生成新的密码文件:htpasswd -bc encrypt_pass jack 123456
  4. 添加新用户密码:htpasswd -b encrypt_pass mike 123456

给予HTTP响应码做权限

需要增加模块--with-http_auth_request_module

  1. 语法:auth_request uri|off;
  2. 默认值:auth_request off;
  3. 上下文:httpserverlocation
  4. location /private/{
  5. auth_request /auth;
  6. }
  7. location /auth {
  8. //授权服务器,根据返回状态码做后续操作 成功状态200
  9. proxy_pass http://127.0.0.1:8080/verify;
  10. // 带上请求信息可以
  11. proxy_pass_request_body off;
  12. proxy_set_header Content-Length "";
  13. proxy_set_header X-Original-URI $request_uri;
  14. }