您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“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. 連接頻率限制
語法
syntax: limit_conn_zone key zone=name:size; default: — context: http syntax: 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. 請求頻率限制
語法
syntax: limit_req_zone key zone=name:size rate=rate; default: — context: http syntax: 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的訪問控制
語法
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
address
:ip地址,例如:192.168.1.1cidr
:例如: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. 基于用戶的登錄認證
語法
syntax: auth_basic string | off; default: auth_basic off; context: http, server, location, limit_except syntax: 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_root new 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_conf auth_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 的局限性
用戶信息依賴文件方式
操作管理效率低下
讀到這里,這篇“Nginx請求限制和訪問控制怎么實現”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。