從Nginx配置與應用詳解專題的投票結果來看,Nginx已是目前僅次於APache和MS IIS的Web服務器。Nginx優秀的高併發支持和高效的負載均衡是咱們選擇它的理由。但有時咱們但願它能作的更多。本文將向您介紹如何在Nginx下對IP和目錄進行限速,在某種應用場景下,這也是個常見需求。html
Nginx能夠經過HTTPLimitZoneModule和HTTPCoreModule兩個目錄來限速。java
示例:nginx
limit_zone one $binary_remote_addr 10m; location / { limit_conn one 1; limit_rate 100k; }
說明:服務器
limit_zone,是針對每一個IP定義一個存儲session狀態的容器。這個示例中定義了一個10m的容器,按照32bytes/session,能夠處理320000個session。session
而後針對目錄進行設定。併發
limit_conn one 1;
是限制每一個IP只能發起一個鏈接。負載均衡
limit_rate 100k;
是對每一個鏈接限速100k. 注意,這裏是對鏈接限速,而不是對IP限速。若是一個IP容許兩個併發鏈接,那麼這個IP就是限速limit_rate x 2。高併發
Nginx 監控spa
上述配置中,首先咱們定義了一個 location ~ ^/NginxStatus/,code
這樣經過 http://localhost/NginxStatus/ 就能夠監控到 Nginx 的運行信息,顯示的內容以下:
Active connections: 70 server accepts handled requests 14553819 14553819 19239266 Reading: 0 Writing: 3 Waiting: 67
NginxStatus 顯示的內容意思以下:
active connections – 當前 Nginx 正處理的活動鏈接數。
server accepts handled requests -- 總共處理了 14553819 個鏈接 , 成功建立 14553819 次握手 ( 證實中間沒有失敗的 ), 總共處理了 19239266 個請求 ( 平均每次握手處理了 1.3 個數據請求 )。
reading -- nginx 讀取到客戶端的 Header 信息數。
writing -- nginx 返回給客戶端的 Header 信息數。
waiting -- 開啓 keep-alive 的狀況下,這個值等於 active - (reading + writing),意思就是 Nginx 已經處理完正在等候下一次請求指令的駐留鏈接。
nginx防盜鏈
location ~* \.(gif|jpg|png|swf|flv)$ { root html valid_referers none blocked *.nginxcn.com; if ($invalid_referer) { rewrite ^/ www.nginx.cn #return 404; } }