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...