我很好奇为什么需要在top属性之上的nginx配置文件中指定一个server_name。
我一直在阅读一个关于理解nginx配置文件的数字海洋文章,它解释了这两个设置之间的区别:
侦听:此服务器块设计用于响应的ip地址/端口组合。如果由与这些值匹配的客户端发出请求,则可能会选择此块来处理连接。server_name:此指令是用于选择要处理的服务器块的另一个组件。如果有多个具有相同特性的侦听指令的服务器块可以处理请求,Nginx将解析请求的“主机”头部,并将其与此指令匹配。
但是,怎么会有两个不同的服务器监听同一个ip和同一个端口呢?据我所知,Linux甚至不允许您在同一个端口上启动两个服务。
我遗漏了什么?
谢谢!
发布于 2017-07-02 21:39:41
Nginx是Linux上的一个服务,它使用的是您告诉它使用的端口。从那里开始,Linux并不关心nginx做什么,所以如果nginx想要在请求中读取到保留端口(例如,端口80上的get example.com ),并与其他请求(例如,端口80上的get example.net )做一些不同的事情,那么它可以这样做。
由于一台服务器通常承载多个域,因此nginx和所有现代web服务器软件都提供了支持此功能的特性,在nginx中这是server_name指令。
但是,如果nginx想要在服务器上的其他服务(例如,OpenSSH通常使用的端口22 )上做一些事情,那么就会有冲突需要解决。
发布于 2017-06-29 19:15:06
使用HTTP1.1,您可以指向一个IP多个域名,在HTTP1.0中是不可能的(在这个答案中可以看到更多)。因此,您从nginx进程开始,它侦听请求的端口、无限数量的域和子域。例如,您可以检查stackoverflow.com和serverfault.com,它们都指向相同的IP。
https://serverfault.com/questions/858627
复制相似问题