Nginx 處理請求

我們可以指定多個虛擬服務器,每個服務器由一個server {}上下文描述。

server {
  listen      *:80 default_server;
  server_name cainiaoplus.com;

  return 200 "Hello from javatpoint.co";
}

server {
  listen      *:80;
  server_name nikita.co;

  return 200 "Hello from nikita.co";
}

server {
  listen      *:81;
  server_name deep.co;

  return 200 "Hello from deep.co";
}

上面的例子中,nginx 將檢查 listen 指令以測試哪個虛擬服務器正在偵聽給定的 IP: port組合,然后檢查Host 標頭中的域名匹配 server_name 指令的值。

Nginx 按以下順序選擇虛擬服務器:

  • IP: port 上的服務器列表,帶有匹配的指令,如 server_name。
  • P: port 上的服務器列表,帶有 default_server 標志;
  • P: port 上的服務器列表,第一個已定義。
  • 如果沒有匹配項,則拒絕連接。

從上面的例子中,輸出將是:

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

server_name 指令

server_name 指令用于接受多個值;它還用于處理通配符匹配和正則表達式。

server_name cainiaoplus.com; # 完全符合  
server_name *.cainiaoplus.com; # 通配符匹配  
server_name cainiaoplus.*; # 通配符匹配  
server_name ~^[ 0 - 9 ]*\.cainiaoplus\.com$; # 正則匹配  

如果有任何歧義,那么 nginx 使用以下順序:

  • 完全匹配名稱;
  • 以星號開頭的最長通配符名稱,例如“*examples.org”,
  • 以星號結尾的最長通配符名稱,例如“mail.*”;
  • 第一個匹配的正則表達式。

Nginx 將存儲三個哈希表:確切名稱、以星號開頭的通配符和以星號結尾的通配符。如果結果不在上面聲明的表中,則將按順序測試正則表達式。

server_name .cainiaoplus.com;

它是以下的縮寫:

server_name  cainiaoplus.co  www.cainiaoplus.co  *.cainiaoplus.co;

只有一個區(qū)別:.cainiaoplus.co 存儲在第二個表中,這意味著它比顯式聲明慢一點。

listen 指令

在大多數(shù)情況下,我們會看到 listen 指令接受 IP: 端口值。

listen 127.0.0.1:80;  
listen 127.0.0.1;    # port :80 is used by default  
  
listen *:81;  
listen 81;           # all ips are used by default  
  
listen [::]:80;      # IPv6 addresses  
listen [::1];        # IPv6 addresses  

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

listen unix:/var/run/nginx.sock;  

甚至我們可以使用主機名:

listen localhost:80;  
listen netguru.co:80;  

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

丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清