這是 Nginx 學習總結的第三篇,上一篇介紹到了 Nginx 學習總結(2) —— 基本配置,這一篇會對Location 模塊
作一些總結。咱們知道,Location 模塊
主要是用於針對某些特定的 URL 進行配置,能夠由前綴字符串定義,也能夠由正則表達式定義。php
location = /test.png { # 精確匹配 [ configuration A ] } location / { # 通用匹配,可是正則表達式和最長字符串會優先被匹配 [ configuration B ] } location /documents/ { # 前綴字符串匹配 # 匹配任何以 /documents/ 開頭的請求 # 只有後面的正則表達式沒有匹配到時,該配置纔會被採用 [ configuration C ] } location ^~ /images/ { # 前綴字符串匹配 # 匹配任何以 /images/ 開頭的請求,匹配成功之後,會中止搜索後面的正則表達式匹配 [ configuration D ] } location ~* \.(gif|jpg|jpeg)$ { # 正則表達式匹配,匹配全部以 gif,jpg,jpeg 結尾的請求 # 然而,全部請求 /images/ 下的圖片會被 configuration D 處理,由於 ^~ 指令,匹配不到這一條規則 [ configuration E ] } location /images/abc/ { # 前綴字符串匹配 # 只有去掉 configuration D 才能被匹配到 [ configuration F ] }
=
精確匹配; ^~
提升前綴字符串的匹配優先級; ~
區分大小寫的正則表達式匹配;~*
不區分大小寫的正則表達式匹配;/
通用匹配(由於全部的地址都以 / 開頭,因此這條規則將匹配到全部請求),若是沒有其它匹配,任何請求都會匹配到。默認狀況, Nginx 先進行前綴字符串匹配,而後進行正則表達式匹配:若是前綴字符串匹配到了,而且前綴字符串有^~
,就不繼續往下匹配正則表達式;若是沒有這個^~
,即便前綴匹配到了,也要進行正則表則式匹配,若是正則表達式匹配到了,就是用正則表達式的,沒有就是用前綴字符串匹配到的路徑。總結以下:css
匹配優先級:精確匹配 >(^~) > 正則匹配 > 字符串(長 > 短)
# 第一個必選規則 # 直接匹配網站根目錄,經過域名訪問網站首頁比較頻繁,使用這個會加速處理,好比官網首頁 location = / { root /usr/share/nginx/html; index index.php index.html index.htm; } # 第二個必選規則 # 處理靜態文件請求,有兩種配置模式,目錄匹配或後綴匹配,任選其一或搭配使用 location ~* \.(gif|jpg|jpeg|png|css|js|ico)$ { expires 7d; # 用來設置 HTTP 應答中的 Expires 和 Cache-Control 的頭標時間,來告訴瀏覽器訪問這個靜態文件時,不用再去請求服務器,直接從本地緩存讀取就能夠了 } location ^~ /public/ { root /usr/share/nginx/html/laravel/public; expires 7d; } # 第三個必選規則 # 用來轉發動態請求到後端應用服務器 location / { root /usr/share/nginx/html; index index.php index.html index.htm; }
有時,須要將原來的 URL 請求跳轉到新的 URL 連接,但又不想使原來的 URL 失效,好比訪問 http://jochen.com/test
時,須要跳轉到 http://jochen.com/
,此時能夠配置一個跳轉:html
location = /test/ { return 302 http://jochen.com/; }
有時,咱們須要對訪問作一些限制。好比,Nginx 的 ngx_http_stub_status_module
模塊(該模塊不是默認安裝的,可使用 --with-http_stub_status_module
編譯安裝)提供了查看 Nginx 運行的基本狀態信息,咱們只想讓部分 IP 的人能夠查看,此時能夠配置一個訪問控制:前端
location /nginx-status { # 在1.7.5版本以前,使用 stub_status on; 指令 stub_status; allow 127.0.0.1; allow 192.168.4.220; deny all; }
Nginx 默認是不容許列出整個目錄的。如需此功能,咱們能夠經過一下配置開啓:nginx
location / { root /usr/share/nginx/html; autoindex on; # 開啓目錄自動索引 autoindex_exact_size off; # 默認爲on,顯示出文件的確切大小,單位是bytes。改成off後,顯示出文件的大概大小,單位是kB或者MB或者GB autoindex_localtime on; # 默認爲off,顯示的文件時間爲GMT時間。改成on後,顯示的文件時間爲文件的服務器時間 }
參考文章laravel