Nginx,为什么需要指定服务器名称?

Nginx,为什么需要指定服务器名称?

我很好奇为什么需要在 nginx 配置文件中的 listen 属性上指定 server_name。

我一直在读digitalocean 文章理解 nginx 配置文件,这就是它如何解释这两个设置之间的区别:

listen:此服务器块旨在响应的 IP 地址/端口组合。如果客户端发出的请求与这些值匹配,则可能会选择此块来处理连接。

server_name:此指令是用于选择要处理的服务器块的另一个组件。如果有多个具有相同特异性的 listen 指令的服务器块可以处理请求,Nginx 将解析请求的“Host”标头并将其与此指令进行匹配。

但是怎么会有两个不同的服务器监听同一个 IP 和同一个端口呢?据我所知,Linux 甚至不允许您启动两个监听同一个端口的服务。

我错过了什么?

谢谢!

答案1

Nginx 是 Linux 上的一项服务,它使用您指定的端口。从此以后,Linux 不再关心 nginx 的行为,因此如果 nginx 想要读取对保留端口(例如,端口 80)的请求中的某些内容,并执行与其他请求(例如,端口 80)get example.com不同的操作,它可以执行此操作。get example.net

由于一台服务器通常托管多个域,因此 nginx 和所有现代 Web 服务器软件都提供了支持此功能的功能,在 nginx 中这就是server_name指令。

但是,如果 nginx 想要在与服务器上其他服务相同的端口上执行某些操作(例如,OpenSSH 通常使用的端口 22),那么就会发生冲突需要解决。

答案2

很好HTTP 1.1你可以将一个 IP 指向多个域名,但是这是不可能的HTTP 1.0(更多内容请参见这个答案)。因此,您启动nginx进程并监听请求的端口、无限数量的域和子域。例如,您可以检查 stackoverflow.com 和 serverfault.com,它们都指向相同的 IP。

相关内容