nginx 如何處理一個請求

Sparrow發表於2019-01-19

當請求到達nginx伺服器之時 如果我們配置檔案如下

   server {
        listen      80;
        server_name example.org www.example.org;
        ...
    }
    server {
        listen      80;
        server_name example.net www.example.net;
        ...
    }
    server {
        listen      80;
        server_name example.com www.example.com;
        ...
    }

1.nginx首先會根據請求資訊中的Host進行匹配server_name,選擇對應的server
2.如果請求中Host欄位沒有域名形式(即ip形式的訪問網站,如:輸入127.0.0.1 訪問),那麼nginx預設選擇第一個server
3.也可以在listen 加入default_server 標明預設虛擬服務 ( listen 80 default_server),那麼如果找不到
server_name ,ngnix會預設選中這個server
如果想匹配不到server_name 後返回錯誤資訊,可新增如下server配置

server {
    listen    80;
    server_name    ``;
    return `404`
}

還一種配置如下 listen 為ip:port

server {
    listen    192.168.0.1:80
    server_name example.org  *.example.org
    ...
}
server {
    listen    192.168.0.1:80
    server_name example.net  *.example.net
    ...
}
server {
    listen    192.168.0.2:80
    server_name example.com  *.example.com
    ...
}

那麼nginx會首先選擇匹配listen 一致的,然後再根據Host來匹配server_name,如果匹配不到,可以進行如上預設設定

相關文章