Nginx要求節流和存取控制的解析

來源:互聯網
上載者:User
這篇文章主要介紹了關於Nginx要求節流和存取控制的解析,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下

Nginx要求節流和存取控制

一、Nginx的要求節流

1. HTTP協議的串連與請求

HTTP協議版本與串連關係

HTTP協議版本 串連關係
HTTP1.0 TCP不能複用
HTTP1.1 順序性TCP複用
HTTP2.0 多工TCP複用
HTTP請求建立在一次TCP串連的基礎上。
一次TCP串連至少可以產生一次HTTP請求,HTTP1.1版本以後,建立一次TCP串連可以發送多次HTTP請求。

1. 串連頻率限制

ngx_http_limit_conn_module

文法

Syntax:        limit_conn_zone key zone=name:size;Default:    —Context:    httpSyntax:        limit_conn zone number;Default:    —Context:    http, server, location

用法

  • 在nginx設定檔中的 http 下配置

http {    # ...其它代碼省略...    # 開闢一個10m的串連空間,命名為addr    limit_conn_zone $binary_remote_addr zone=addr:10m;    server {        ...        location /download/ {            # 伺服器每次只允許一個IP地址串連            limit_conn addr 1;        }    }}

2. 請求頻率限制

ngx_http_limit_req_module

文法

Syntax:        limit_req_zone key zone=name:size rate=rate;Default:    —Context:    httpSyntax:        limit_req zone=name [burst=number] [nodelay];Default:    —Context:    http, server, location

用法

  • 在nginx設定檔中的 http 下配置

http {    # ...其它代碼省略...        # 開闢一個10m的請求空間,命名為one。同一個IP發送的請求,平均每秒只處理一次    limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;        server {            ...        location /search/ {            limit_req zone=one;            # 當用戶端請求超過指定次數,最多寬限5次請求,並延遲處理,1秒1個請求            # limit_req zone=one burst=5;            # 當用戶端請求超過指定次數,最多寬限5次請求,並立即處理。            # limit_req zone=one burst=5 nodelay;        }    }}

二、Nginx的存取控制

1. 基於IP的存取控制

ngx_http_access_module

文法

Syntax:        allow address | CIDR | unix: | all;Default:    —Context:    http, server, location, limit_exceptSyntax:        deny address | CIDR | unix: | all;Default:    —Context:    http, server, location, limit_except
address:IP地址,例如:192.168.1.1
CIDR:例如:192.168.1.0/24;
unix:Socket方式
all:所有

用法

  • 在nginx設定檔中的 server 下配置

server {    # ...其它代碼省略...    location ~ ^/index_1.html {        root   /usr/share/nginx/html;        deny 151.19.57.60; # 拒絕這個IP訪問        allow all; # 允許其他所有IP訪問    }    location ~ ^/index_2.html {        root   /usr/share/nginx/html;        allow 151.19.57.0/24; # 允許IP 151.19.57.* 訪問        deny all; # 拒絕其他所有IP訪問    }}

ngx_http_access_module 的局限性

  • 當用戶端通過代理訪問時,nginx的remote_addr擷取的是代理的IP

  • http_x_forwarded_for

    http_x_forwarded_for = Client IP, Proxy1 IP, Proxy2 IP, ...

remote_addr 擷取的是直接和服務端建立串連的用戶端IP。
http_x_forwarded_for 可以記錄用戶端及所有中間代理的IP

2. 基於使用者的登入認證

ngx_http_auth_basic_module

文法

Syntax:        auth_basic string | off;Default:    auth_basic off;Context:    http, server, location, limit_exceptSyntax:        auth_basic_user_file file;Default:    —Context:    http, server, location, limit_except

用法

  • 要使用 htpasswd 命令,需要先安裝httpd-tools

[root~]# yum -y install httpd-tools
  • 使用 htpasswd 命令建立帳號密碼檔案

[root/etc/nginx]# htpasswd -c ./auth_conf auth_rootNew password:Re-type new password:Adding password for user auth_root[root/etc/nginx]# ll auth_conf-rw-r--r-- 1 root root 48 7月   9 11:38 auth_conf[root/etc/nginx]# cat auth_confauth_root:$apr1$2v6gftlm$oo2LE8glGQWi68MCqtcN90
  • 在nginx設定檔中的 server 下配置

server {    # ...其它代碼省略...        location ~ ^/index.html {        root   /usr/share/nginx/html;        auth_basic "Auth access! Input your password!";        auth_basic_user_file /etc/nginx/auth_conf;    }}
  • 修改後重新載入設定檔nginx -s reload

  • 使用瀏覽器訪問 http://192.168.33.88/index.html

輸入正確的使用者名稱和密碼,即可正常訪問。

ngx_http_auth_basic_module 的局限性

  • 使用者資訊依賴檔案方式

  • 操作管理效率低下

以上就是本文的全部內容,希望對大家的學習有所協助,更多相關內容請關注topic.alibabacloud.com!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.