我在ubuntu 14.04上使用nginx 版本1.6.2
我试过在引用nginx文档的configuration文件中inputlimit_conn和limit_req 。
Nginx运行良好,没有limit_conn和limit_req选项 。
以下是有日志消息的nginxconfiguration的testing用例。
我不知道我的代码有什么问题。
案例1 – 完整的configuration
/etc/nginx/nginx.conf
http { ... include /etc/nginx/sites-enabled/*; ... limit_conn_zone $binary_remote_addr zone=conn_limit_per_ip:10m; limit_req_zone $binary_remote_addr zone=req_limit_per_ip:10m rate=5r/s; ... }
/etc/nginx/sites-enabled/service.conf
server { ... location / { limit_conn conn_limit_per_ip 30; limit_req zone=req_limit_per_ip burst=5 nodelay; ... } ... }
log message
unknown limit_req_zone "req_limit_per_ip" in /etc/nginx/sites-enabled/service.conf
情况2 – 从启用站点的configuration文件中删除limit_req
/etc/nginx/nginx.conf
http { ... include /etc/nginx/sites-enabled/*; ... limit_conn_zone $binary_remote_addr zone=conn_limit_per_ip:10m; limit_req_zone $binary_remote_addr zone=req_limit_per_ip:10m rate=5r/s; ... }
/etc/nginx/sites-enabled/service.conf
server { ... location / { limit_conn conn_limit_per_ip 30; ... } ... }
log message
the size 10485760 of shared memory zone "conn_limit_per_ip" conflicts with already declared size 0 in /etc/nginx/nginx.conf
情况3 – 从启用站点的configuration文件中删除limit_conn
/etc/nginx/nginx.conf
http { ... include /etc/nginx/sites-enabled/*; ... limit_conn_zone $binary_remote_addr zone=conn_limit_per_ip:10m; limit_req_zone $binary_remote_addr zone=req_limit_per_ip:10m rate=5r/s; ... }
/etc/nginx/sites-enabled/service.conf
server { ... location / { limit_req zone=req_limit_per_ip burst=5 nodelay; ... } ... }
log message
unknown limit_req_zone "req_limit_per_ip" in /etc/nginx/sites-enabled/service.conf
案例4 – 从站点启用configuration文件中删除所有
/etc/nginx/nginx.conf
http { ... include /etc/nginx/sites-enabled/*; ... limit_conn_zone $binary_remote_addr zone=conn_limit_per_ip:10m; limit_req_zone $binary_remote_addr zone=req_limit_per_ip:10m rate=5r/s; ... }
/etc/nginx/sites-enabled/service.conf
server { ... location / { ... } ... }
log message
[OK] - nginx reloaded well
情况5 – 删除limit_req_zone和limit_req
/etc/nginx/nginx.conf
http { ... include /etc/nginx/sites-enabled/*; ... limit_conn_zone $binary_remote_addr zone=conn_limit_per_ip:10m; ... }
/etc/nginx/sites-enabled/service.conf
server { ... location / { limit_conn conn_limit_per_ip 30; ... } ... }
log message
the size 10485760 of shared memory zone "conn_limit_per_ip" conflicts with already declared size 0 in /etc/nginx/nginx.conf
情况6 – 删除limit_conn_zone和limit_conn
/etc/nginx/nginx.conf
http { ... include /etc/nginx/sites-enabled/*; ... limit_req_zone $binary_remote_addr zone=req_limit_per_ip:10m rate=5r/s; ... }
/etc/nginx/sites-enabled/service.conf
server { ... location / { limit_req zone=req_limit_per_ip burst=5 nodelay; ... } ... }
log message
unknown limit_req_zone "req_limit_per_ip" in /etc/nginx/sites-enabled/service.conf
将/etc/nginx/nginx.conf合并到/etc/nginx/nginx.conf 。 换句话说,在nginx.conf文件的http块中删除service.conf文件并粘贴server块。 这里是代码。
/etc/nginx/nginx.conf
http { .. limit_req_zone $binary_remote_addr zone=req_limit_per_ip:10m rate=2r/s; limit_conn_zone $binary_remote_addr zone=conn_limit_per_ip:10m; .. server { .. location / { limit_req zone=req_limit_per_ip burst=5 nodelay; limit_conn conn_limit_per_ip 30; } .. } }
limit_req_zone $binary_remote_addr zone=req_limit_per_ip:10m rate=2r/s + limit_req zone=req_limit_per_ip burst=5 nodelay
rate * burst在burst秒内burst nodelay选项:Nginx将返回503响应,不处理过多的请求 nodelay选项:Nginx会等待(没有503响应)并处理一些延迟的请求 limit_conn_zone $binary_remote_addr zone=conn_limit_per_ip:10m + limit_conn conn_limit_per_ip 30
指令limit_req_zone和limit_conn_zone只需要在/etc/nginx/sites-enabled/service.conf包含的相应指令之前。
所以在案例1中,只需要将/etc/nginx/nginx.conf更改为:
http { ... limit_conn_zone $binary_remote_addr zone=conn_limit_per_ip:10m; limit_req_zone $binary_remote_addr zone=req_limit_per_ip:10m rate=5r/s; ... include /etc/nginx/sites-enabled/*; ... }
看到: