NGINX語法規則

location配置語法規則: location [=||*|^~] /uri/ { … }

= 開頭表示精確匹配
^~ 普通字符匹配 , 但是如果字符匹配到了就不再繼續執行正則匹配 (普通的字符匹配完畢會記錄最長的匹配記錄,但是不會立刻選定, 而是繼續進行正則匹配, 如果正則匹配符合就按照正則匹配執行) ,。
~ 開頭表示區分大小寫的正則匹配
~* 開頭表示不區分大小寫的正則匹配
!和!*分別為區分大小寫不匹配及不區分大小寫不匹配 的正則
/ 通用匹配,任何請求都會匹配到。

匹配規則
首先尋找精準匹配, 如果有則停止匹配
沒有則匹配普通匹配 --> 如果有多個匹配 則記錄最長匹配結果
匹配正則表達式 --> 如果有匹配-->立即返回, 如果沒有-->返回普通匹配最長匹配結果

location 命中過程:

  1. 先判斷精準命中,如果命中,則立即返回結果并結束解析過程
  2. 判斷普通命中, 如果有多個命中,記錄下來最長的命中結果(注意:是記錄但并不結束,記錄的是最 長的命中)
  3. 繼續判斷正則表達式的解析結果,按配置里的正則表達式順序為準,由上到下開始匹配,一旦匹配成功一個, 立即返回結果,并結束解析過程

拓展:
普通命中時,匹配順序無所謂,因為會全部匹配一遍然后命中最長匹配
正則命中時,匹配順序很重要,因為是從上到下匹配,一旦命中就直接結束匹配

===================================================
匹配規則:

location = / {

規則A

}
location = /login {

規則B

}
location ^~ /static/ {

規則C

}
location ~ .(gif|jpg|png|js|css)$ {

規則D

}
location ~* .png$ {

規則E

}
location !~ .xhtml$ {

規則F

}
location !~* .xhtml$ {

規則G

}
location / {

規則H

}

=====================================================
實例:
那么產生的效果如下:
訪問根目錄/, 比如http://localhost/ 將匹配規則A
訪問 http://localhost/login 將匹配規則B,http://localhost/register 則匹配規則H
訪問 http://localhost/static/a.html 將匹配規則C
訪問 http://localhost/a.gif, http://localhost/b.jpg 將匹配規則D和規則E,但是規則D順序優先,規則E不起作用,而 http://localhost/static/c.png 則優先匹配到 規則C
訪問 http://localhost/a.PNG 則匹配規則E, 而不會匹配規則D,因為規則E不區分大小寫。
訪問 http://localhost/a.xhtml 不會匹配規則F和規則G,http://localhost/a.XHTML不會匹配規則G,因為不區分大小寫。規則F,規則G屬于排除法,符合匹配規則但是不會匹配到,所以想想看實際應用中哪里會用到。
訪問 http://localhost/category/id/1111 則最終匹配到規則H,因為以上規則都不匹配,這個時候應該是nginx轉發請求給后端應用服務器,比如FastCGI(php),tomcat(jsp),nginx作為方向代理服務器存在。
=====================================================
實際應用配置:

直接匹配網站根,通過域名訪問網站首頁比較頻繁,使用這個會加速處理,官網如是說。

這里是直接轉發給后端應用服務器了,也可以是一個靜態首頁

第一個必選規則

location = / {
proxy_pass http://tomcat:8080/index
}

第二個必選規則是處理靜態文件請求,這是nginx作為http服務器的強項

有兩種配置模式,目錄匹配或后綴匹配,任選其一或搭配使用

location ^~ /static/ {
root /webroot/static/;
}
location ~* .(gif|jpg|jpeg|png|css|js|ico)$ {
root /webroot/res/;
}

第三個規則就是通用規則,用來轉發動態請求到后端應用服務器

非靜態文件請求就默認是動態請求,自己根據實際把握

畢竟目前的一些框架的流行,帶.php,.jsp后綴的情況很少了

location / {
proxy_pass http://tomcat:8080/
}
=====================================================
全局變量:
官方配置:http://nginx.org/en/docs
args #請求中的參數值query_string #同 argsarg_NAME #GET請求中NAME的值
is_args #如果請求中有參數,值為"?",否則為空字符串uri #請求中的當前URI(不帶請求參數,參數位于args),可以不同于瀏覽器傳遞的request_uri的值,它可以通過內部重定向,或者使用index指令進行修改,uri不包含主機名,如"/foo/bar.html"。document_uri #同 uridocument_root #當前請求的文檔根目錄或別名
host #優先級:HTTP請求行的主機名>"HOST"請求頭字段>符合請求的服務器名hostname #主機名
https #如果開啟了SSL安全模式,值為"on",否則為空字符串。binary_remote_addr #客戶端地址的二進制形式,固定長度為4個字節
body_bytes_sent #傳輸給客戶端的字節數,響應頭不計算在內;這個變量和Apache的mod_log_config模塊中的"%B"參數保持兼容bytes_sent #傳輸給客戶端的字節數
connection #TCP連接的序列號connection_requests #TCP連接當前的請求數量
content_length #"Content-Length" 請求頭字段content_type #"Content-Type" 請求頭字段
cookie_name #cookie名稱limit_rate #用于設置響應的速度限制
msec #當前的Unix時間戳nginx_version #nginx版本
pid #工作進程的PIDpipe #如果請求來自管道通信,值為"p",否則為"."
proxy_protocol_addr#獲取代理訪問服務器的客戶端地址,如果是直接訪問,該值為空字符串realpath_root #當前請求的文檔根目錄或別名的真實路徑,會將所有符號連接轉換為真實路徑
remote_addr #客戶端地址remote_port #客戶端端口
remote_user #用于HTTP基礎認證服務的用戶名request #代表客戶端的請求地址
request_body #客戶端的請求主體:此變量可在location中使用,將請求主體通過proxy_pass,fastcgi_pass,uwsgi_pass和scgi_pass傳遞給下一級的代理服務器request_body_file #將客戶端請求主體保存在臨時文件中。文件處理結束后,此文件需刪除。如果需要之一開啟此功能,需要設置client_body_in_file_only。如果將次文件傳遞給后端的代理服務器,需要禁用request body,即設置proxy_pass_request_body off,fastcgi_pass_request_body off,uwsgi_pass_request_body off,or scgi_pass_request_body off
request_completion #如果請求成功,值為"OK",如果請求未完成或者請求不是一個范圍請求的最后一部分,則為空request_filename #當前連接請求的文件路徑,由root或alias指令與URI請求生成
request_length #請求的長度 (包括請求的地址,http請求頭和請求主體)request_method #HTTP請求方法,通常為"GET"或"POST"
request_time #處理客戶端請求使用的時間; 從讀取客戶端的第一個字節開始計時request_uri #這個變量等于包含一些客戶端請求參數的原始URI,它無法修改,請查看uri更改或重寫URI,不包含主機名,例如:"/cnphp/test.php?arg=freemouse"scheme #請求使用的Web協議,"http" 或 "https"
server_addr #服務器端地址,需要注意的是:為了避免訪問linux系統內核,應將ip地址提前設置在配置文件中server_name #服務器名
server_port #服務器端口server_protocol #服務器的HTTP版本,通常為 "HTTP/1.0" 或 "HTTP/1.1"
status #HTTP響應代碼time_iso8601 #服務器時間的ISO 8610格式
time_local #服務器時間(LOG Format 格式)cookie_NAME #客戶端請求Header頭中的cookie變量,前綴"cookie_"加上cookie名稱的變量,該變量的值即為cookie名稱的值http_NAME #匹配任意請求頭字段;變量名中的后半部分NAME可以替換成任意請求頭字段,如在配置文件中需要獲取http請求頭:"Accept-Language",http_accept_language即可http_cookie #cookie 信息
http_posthttp_referer #引用地址
http_user_agent #客戶端代理信息http_x_forwarded_for#相當于網絡訪問路徑。http://www.cnblogs.com/craig/archive/2008/11/18/1335809.html
sent_http_NAME #可以設置任意http響應頭字段;變量名中的后半部分NAME可以替換成任意響應頭字段,如需要設置響應頭Content-length,sent_http_content_length即可
sent_http_cache_controlsent_http_connection
sent_http_content_typesent_http_keep_alive
sent_http_last_modifiedsent_http_location
$sent_http_transfer_encoding

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,406評論 6 538
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,034評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,413評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,449評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,165評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,559評論 1 325
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,606評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,781評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,327評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,084評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,278評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,849評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,495評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,927評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,172評論 1 291
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,010評論 3 396
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,241評論 2 375

推薦閱讀更多精彩內容