我在使用 nginx 和 fastcgi 后端时遇到了问题。我尝试增加积压大小,但似乎不起作用。我做错了什么?后端是通过 systemd 启动的。
操作系统:16.04.2 LTS(Xenial Xerus)
# /etc/systemd/system/backend.socket
[Socket]
Backlog=1000
ListenStream=/tmp/backend.socket
# ss -l|grep back
u_str LISTEN 0 128 /tmp/backend.socket 21641 * 0
# nginx log
2017/06/21 09:40:56 [error] 1565#1565: *33729 connect() to unix:/tmp/backend.socket failed (11: Resource temporarily unavailable) while connecting to upstream, upstream: "fastcgi://unix:/tmp/backend.socket:"
$ cat /proc/sys/net/core/somaxconn
1024
答案1
从listen(2)
:
如果 backlog 参数大于 /proc/sys/net/core/somaxconn 中的值,则会将其默默截断为该值;此文件中的默认值为 128。在 2.4.25 之前的内核中,此限制是一个硬编码值 SOMAXCONN,其值为 128。
因此,您需要将值提升/proc/sys/net/core/somaxconn
至所需的积压长度。
答案2
Backlog 参数是正确的。问题是,.socket 文件未通过 systemctl enable x.socket 启用,因此 systemd 仅启动守护进程,守护进程本身正在创建套接字,显然没有考虑 .socket 文件中的 backlog 参数。