Nginx處理HTTP請求的路由過程

2021-07-14 15:41:00 字數 989 閱讀 1695

nginx的worker程序首先獲取http請求的目的ip位址和埠號,然後掃瞄所有server配置,根據ip位址和埠號找到對應的server列表。接著nginx根據請求的host頭字段和server的server_name(可以包括ip位址,比如192.168.0.6)匹配情況決定選擇哪個server,選擇的優先順序如下:

1.完全匹配。

2.最長字首匹配。

3.最長字尾匹配。

4.按配置順序出現的第乙個正規表示式匹配。

5.listen指令配置有default_server引數的server。

6.按配置順序出現的第乙個server。

使用下面的配置可以丟棄缺乏host頭的請求:

server

萬用字元必須以"*"開頭,或者以"*"結尾,而且前面或後面只能是".",比如*.example.com或者www.example.*。".example.com"表示example.com||*.example.com。

正規表示式以~開始,如果正規表示式中含有"",則必須加上引號:

server_name  "~^(?\w\d+)\.example\.net$";

正規表示式中可以使用命名捕獲組:

server }

server_name不支援匹配所有的名稱(比如"*"),要實現該功能,可以使用server_name_in_redirect指令。

location [=|~|~*|^~] /uri/

location @name 

匹配規則如下:

1.如果存在=/uri/匹配該uri,則停止搜尋並作為最佳匹配。

2.找到所有剩下的常規匹配中的最長匹配,如果該匹配使用^~字首,就停止搜尋並作為最佳匹配。

3.找到第乙個匹配的正規表示式,如果存在,則停止搜尋並使用該正規表示式作為最佳匹配。

4.如果3不存在,則使用2中找到的最長匹配。

注意:為了避免找不到匹配的location,可以在最後使用location / 匹配所有的uri。

nginx處理http請求完整流程

在nginx的worker程序啟動後,便阻塞在epoll wait函式 ngx epoll process events 等待http請求的到來,那麼當乙個http請求到來之時,nginx是如何作出相應的呢?下面介紹該過程。首先,在ngx event process init函式中,可看到rev h...

處理HTTP請求

處理http請求 當客戶端瀏覽器通過url訪問web應用時,首先要做的就是獲取使用者提交的資訊,也就是從http請求資料中獲得的資訊。http請求資料分為http請求頭和body http請求頭包含了一些http請求欄位和http get欄位 body中可以包含任何型別的資料,包含http get欄...

nginx發起http請求

可以用proxypass 配置檔案如下 worker processes 2 nginx worker 數量 error log logs error.log 指定錯誤日誌檔案路徑 配置了乙個81埠的上游伺服器,並在 test下用capture做了乙個子查詢,最後返回md5值 curl v x ge...