首頁  >  問答  >  主體

nginx - 依教學使用ngx_http_limit_conn_module,無法限制虛擬主機的並發連線數

自己依照http://www.jb51.net/article/7... 設定nginx.conf檔案限制虛擬主機的並發連線數,如下是nginx.conf中的主要內容。

http {

limit_conn_zone $server_name zone=perserver:10m;
include       mime.types;
default_type  application/octet-stream;

sendfile        on;
keepalive_timeout  65;

server {
    listen       54321;
    server_name  localhost;
    limit_conn perserver 100;
    #charset koi8-r;
    #access_log  logs/host.access.log  main;
    location / {
        root   html;
        index  index.html index.htm;
    }        
    location /status {
        stub_status on;
        access_log off;
    }
}
}


設定完成後,reload設定文件,並利用apache的ab工具向192.168.3.161:54321/index.html進行壓力測試,壓力測試程式碼如下:
/usr/bin/ab -c 2000 -n 100000 http://192.168.3.161:54321/in...

对网站加压时,利用浏览器访问192.168.3.161:54321/status观察并发连接数,发现Active connections依然大于100,如下图所示。

#請問我的配置哪裡出現了問題?

ringa_leeringa_lee2712 天前673

全部回覆(3)我來回復

  • PHP中文网

    PHP中文网2017-05-16 17:16:08

    換了思路。
    之前寫的限製代碼為:limit_conn_zone $server_name zone=perserver:10m;
    利用了nginx內建的$server_name這個變量,沒法成功限制並發連線數。
    我換成了:limit_conn_zone $server_port zone=perserver:10m;
    成功限制了某個連接埠的並發連線數

    回覆
    0
  • 習慣沉默

    習慣沉默2017-05-16 17:16:08

    你可以用

    limit_conn_zone $binary_remote_addr zone=perserver:10M; 

    的形式唄

    $binary_remote_addr
    

    才代表用 用戶的 IP 位址,用 $binary_remote_addr 作為 Key,IP 位址,就有限制的意義。你上面寫的$server_name,就不適合作為對使用者連線數的判斷條件了

    回覆
    0
  • 伊谢尔伦

    伊谢尔伦2017-05-16 17:16:08

    因為這個模組是在PREACCESS階段執行的,所以必然已經發生在tcp連線建立之後的http請求處理階段了。上面的Active connections數值指的應該是tcp連接的同時數吧。即便超過了並發數,回傳了503,這也是在一次成功的tcp連線之上的。

    回覆
    0
  • 取消回覆