nginx – Durch die Verwendung von ngx_http_limit_conn_module gemäß dem Tutorial kann die Anzahl gleichzeitiger Verbindungen des virtuellen Hosts nicht begrenzt werden
ringa_lee
ringa_lee 2017-05-16 17:14:08
0
3
729

Ich folgte http://www.jb51.net/article/7..., um die Datei nginx.conf so zu konfigurieren, dass die Anzahl gleichzeitiger Verbindungen zum virtuellen Host begrenzt wird. Das Folgende ist der Hauptinhalt in 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;
    }
}
}


Nachdem die Konfiguration abgeschlossen ist, laden Sie die Konfigurationsdatei neu und führen Sie mit dem ab-Tool von Apache einen Stresstest für 192.168.3.161:54321/index.html durch. Der Stresstestcode lautet wie folgt:
/usr/bin/ab -c 2000 -n 100000 http://192.168.3.161:54321/in...

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

Entschuldigung, wo liegt das Problem mit meiner Konfiguration?

ringa_lee
ringa_lee

ringa_lee

Antworte allen(3)
洪涛

换了思路。
之前写的限制代码为:limit_conn_zone $server_name zone=perserver:10m;
利用了nginx内置的$server_name这个变量,没法成功限制并发连接数。
我换成了:limit_conn_zone $server_port zone=perserver:10m;
成功限制了某个端口的并发连接数

習慣沉默

你可以用

limit_conn_zone $binary_remote_addr zone=perserver:10M; 

的形式呗

$binary_remote_addr

才代表用 用户的 IP 地址,用 $binary_remote_addr 作为 Key,IP 地址,就有限制的意义。你上面写的$server_name,就不适合作为对用户连接数的判断条件了

伊谢尔伦

因为这个模块是在PREACCESS阶段执行的,所以必然已经发生在tcp连接建立之后的http请求处理阶段了。上面的Active connections数值指的应该是tcp连接的并发数吧。即便超过了并发数,返回了503,这也是在一次成功的tcp连接之上的。

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage