gpt4 book ai didi

Nginx 的 "reuseport"用于相同的 IP :PORT pair on different virtual hosts

转载 作者:行者123 更新时间:2023-12-04 02:18:52 25 4
gpt4 key购买 nike

我正确理解在不同的虚拟主机上为相同的 IP:PORT 对使用“reuseport”是错误的:

http {
server {
listen 192.168.0.1:80 reuseport;
server_name server1;

}
server {
listen 192.168.0.1:80 reuseport;
server_name server2;

}
}

这个配置给了我:
nginx: [emerg] duplicate listen options for 192.168.0.1:80 in /etc/nginx/vhosts/server1.local.conf:66


nginx: [emerg] listen() to 0.0.0.0:80, backlog 511 failed (98: Address already in use)

所以我必须为每个虚拟主机使用唯一的 IP:PORT 对?

同时在服务器范围内“监听 80 重用端口”;工作得很好,但它是否与每个唯一的 IP:PORT 一样?

最佳答案

回答您的最后一个问题 - 在 nginx 中,listen指令只允许在 server 中上下文(这意味着每个虚拟主机)。

根据 manual :

The listen directive can have several additional parameters specific to socket-related system calls. These parameters can be specified in any listen directive, but only once for a given address:port pair.



因此,如果您有 1 个以上的虚拟主机(nginx 配置中的 server 定义),那么您可以使用 reuseport选项中的任何一个。与套接字无关的选项(如 sslspdy )仍然可以设置为超过 1 listen指示。

边注:什么 reuseport 指令确实做到了:

Nginx 从 1.9.1 版本开始支持设置 SO_REUSEPORT TCP 套接字参数。在现代操作系统(从 3.9 开始的 Linux 内核)中,这使内核能够为每个套接字(ip:port)拥有更多的套接字监听器。

没有它,当新连接到达时,内核会通知所有 nginx 工作人员,他们都尝试 accept它。

启用此选项后,每个工作人员都有自己的监听套接字,并且在每个新连接上,内核会选择其中一个来接收它 - 所以没有争用。

有关 reuseport 的优点、缺点和基准的更多信息可以在此阅读选项 Nginx blog post

关于Nginx 的 "reuseport"用于相同的 IP :PORT pair on different virtual hosts,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30559164/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com