NGINX 处理请求

2024 年 8 月 29 日 | 阅读 2 分钟

我们可以指定多个虚拟服务器,每个服务器都由 server {} 上下文描述。

上面的示例将使 nginx 了解如何处理传入的请求。首先,nginx 将检查 listen 指令以测试哪个虚拟服务器正在给定的 IP: 端口组合上侦听。然后,将 server_name 指令中的值与 Host 标头进行测试,该标头存储服务器的域名。

Nginx 按以下顺序选择虚拟服务器

  • 在 IP: 端口上侦听的服务器,具有匹配的指令,即 server_name
  • 在 IP: 端口上侦听的服务器,带有 default_server 标志;
  • 在 IP: 端口上侦听的服务器,第一个定义的。
  • 如果没有匹配项,则拒绝连接。

从上面的示例中,输出将是

Request to nikita.co:80     => "Hello from nikita.co"
Request to www.nikita.co:80 => "Hello from javatpoint.co"
Request to deep.co:80     => "Hello from javatpoint.co"
Request to deep.co:81     => "Hello from nikita.co"
Request to nikita.co:81     => "Hello from deep.co"

server_name 指令

server_name 指令用于接受多个值;它还用于处理通配符匹配和正则表达式。

如果有任何歧义,那么 nginx 使用以下顺序

  • 确切名称;
  • 以星号开头的最长通配符名称,例如“*examples.org”;
  • 以星号结尾的最长通配符名称,例如“mail.*”;
  • 第一个匹配的正则表达式。

Nginx 将存储三个哈希表:确切名称、以星号开头的通配符和以星号结尾的通配符。如果结果不在上述声明的表中,将依次测试正则表达式。

注意:-

它是 ... 的缩写

只有一个区别:.javatpoint.co 存储在第二个表中,这意味着它比显式声明慢一点。

listen 指令

在大多数情况下,我们会看到 listen 指令接受 IP: 端口值。

但是,也可以指定 UNIX 域的套接字

即使我们可以使用主机名

如果该指令不存在,则使用 *:80