nginx服务器的半连接

LINUX:Linux用变量tcp_max_syn_backlog定义backlog队列容纳的最大半连接数。

vim /etc/sysctl.conf可以检查配置这个变量。
net.ipv4.tcp_max_syn_backlog = 16384


但是nginx服务器的backlog队列远远没有到达这个值,就开始拒绝了连接,检查nginx的官方文档:
http://wiki.nginx.org/HttpCoreModule#Directives
中注明:
listen指令中的参数backlog:
backlog=num -- is assigned parameter backlog in call listen(2). By default backlog equals -1.


这样应该不会产生问题,但是查看当前nginx的源代码:
cd /home/software/nginx-1.2.6/src
grep backlog -ir *得到相关参数以及输出(省略其他输出):
os/unix/ngx_darwin_config.h:#define NGX_LISTEN_BACKLOG  -1
os/unix/ngx_solaris_config.h:#define NGX_LISTEN_BACKLOG           511
os/unix/ngx_posix_config.h:#define NGX_LISTEN_BACKLOG  511
os/unix/ngx_linux_config.h:#define NGX_LISTEN_BACKLOG        511
os/unix/ngx_freebsd_config.h:#define NGX_LISTEN_BACKLOG        -1


由此在linux平台上nginx默认的backlog实际上是511,需要配置此值来增大backlog队列。

注意:
内核版本小于2.6.20的话max_qlen_log是直接由sysctl_max_syn_backlog决定的,所以半连接队列的长度就是等于 sysctl_max_syn_backlog
内核版本大于2.6.20的话,SYN_RECV状态数最大值由 net.ipv4.tcp_max_syn_backlog net.core.somaxconn 和 listen()函数中第二个参数int backlog  三个值共同决定
具体计算可以参考:
http://www.piao2010.com/linux%E8%AF%A1%E5%BC%82%E7%9A%84%E5%8D%8A%E8%BF%9E%E6%8E%A5syn_recv%E9%98%9F%E5%88%97%E9%95%BF%E5%BA%A6%E4%BA%8C


产生此问题时候错误日志在/var/log/message中可以看到:
kernel: possible SYN flooding on port 80. Sending cookies.

转载于:https://my.oschina.net/u/273053/blog/101130

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值