訪問能基於客戶端的IP地址容許或拒絕或使用基於HTTP驗證。node
爲了容許或拒絕從某個地址及或全部地址的訪問,使用allow和deny指令:web
location / {瀏覽器
deny 192.168.1.2;服務器
allow 192.168.1.1/24;網站
allow 127.0.0.1;spa
deny all;server
}繼承
爲了啓用驗證,使用auth_basic指令。用戶要麼輸入有效的用戶名和密碼獲取網站的訪問。用戶名和密碼必須在auth_basic_user_file指令命名的文件中列出。索引
server {隊列
...
auth_basic "closed website";
auth_basic_user_file conf/htpasswd;
}
你能讓網站的一些區域沒有驗證即便你須要整個網站驗證。在非驗證區域配置塊中,在auth_basic指令中包括off參數取消繼承外部配置級別設置。例如,限制整個網站訪問,但有些位置能夠公開:
server {
...
auth_basic "closed website";
auth_basic_user_file conf/htpasswd;
location /public/ {
auth_basic off;
}
}
爲了聯合IP地址和驗證,使用satisfy指令。默認,設置爲all,所以客戶端知足這兩種類型的條件授予訪問權限。當satisfy指令設置爲any,至少知足一個條件授予訪問權限。所以,若是IP地址是容許的,未驗證的用戶能夠訪問,反之亦然。
location / {
satisfy any;
allow 192.168.1.0/24;
deny all;
auth_basic "closed site";
auth_basic_user_file conf/htpasswd;
}
能夠限制:
每一個鍵值的鏈接數(例如,每一個IP地址)
每一個鍵值請求速率(在1秒/分鐘期間容許處理的請求數)
鏈接的下載速度
注意,IP地址能在NAT設備後共享,所以經過IP地址應該是明智的。
爲了限制鏈接數,首先使用limit_conn_zone指令定義鍵並設置共享內存區域參數(worker進程將使用該區域共享鍵值計數器)。做爲第一個參數,指定表達式計算爲鍵。第二個參數,指定區域的名字和大小。
limit_conn_zone $binary_remote_address zone=addr:10m;
第二,使用limit_conn指令應用location虛擬服務器或整個http上下文的限制。指定共享內存區域的名字做爲第一個參數,容許每一個鍵的鏈接做爲第二個參數。
location /download/ {
limit_conn addr 1;
}
鏈接數在IP地址基礎上的限制,由於$binary_remote_address變量用做鍵。經過使用$server_name變量限制指定服務器鏈接數:
http {
limit_conn_zone $server_name zone=servers:10m;
server {
limit_conn servers 1000;
}
}
爲了限制請求速率,首先設置鍵和共享內存區域保存計數器。
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
rate參數能指定每秒的請求數(r/s)或沒分鐘的請求數(r/m)。
一旦定義共享內存區域,使用limit_req指令在虛擬服務器或location(或全局,若是須要)爲了限制請求速度:
location /search/ {
limit_req zone=one burst=5;
}
若是速率超過限制,請求被放入隊列延遲處理。burst參數設置等待處理的最大請求數。超過burst限制的請求Nginx響應503錯誤。
若是burst期間不須要延遲,添加nodelay參數。
limit_req zone=one burst=5 nodelay;
爲了限制每一個鏈接的帶寬,使用limit_rate指令:
location /download/ {
limit_rate 50k;
}
使用該設置,客戶端將可以經過單個鏈接下載內容速度最大爲每秒50千字節。然而,客戶端打開各類鏈接。所以,若是目標是組織下載速度大於指定值,鏈接的數量也應該限制。例如,每一個IP地址一個鏈接(若是共享區域使用上面指定的):
location /download/ {
limit_conn addr 1;
limit_rate 50k;
}
爲了只在客戶端下載某一數據以後利用限制,使用limit_rate_after指令。合理容許客戶端快速下載某些數據(例如,文件頭——電影索引),限制下載剩下數據的速率(讓用戶看電影,不下載)。
limit_rate_after 500k;
limit_rate 20k;
下面例子顯示鏈接數和帶寬限制聯合配置。每一個客戶端地址容許最大鏈接數爲5,適合現代瀏覽器打開同時打開三個鏈接的狀況。與此同時,服務下載的location只容許一個鏈接:
http {
limit_conn_zone $binary_remote_address zone=addr:10m
server {
root /www/data;
limit_conn addr 5;
location / {
}
location /download/ {
limit_conn addr 1;
limit_rate 1m;
limit_rate 50k;
}
}
}