Nginx 學習總結(3)—— Location 模塊

這是 Nginx 學習總結的第三篇,上一篇介紹到了 Nginx 學習總結(2) —— 基本配置,這一篇會對Location 模塊 作一些總結。咱們知道,Location 模塊 主要是用於針對某些特定的 URL 進行配置,能夠由前綴字符串定義,也能夠由正則表達式定義。php

Location 匹配規則

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 配置應用

1. 經常使用使用規則
# 第一個必選規則
# 直接匹配網站根目錄,經過域名訪問網站首頁比較頻繁,使用這個會加速處理,好比官網首頁
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;
}
2. 配置臨時跳轉

有時,須要將原來的 URL 請求跳轉到新的 URL 連接,但又不想使原來的 URL 失效,好比訪問 http://jochen.com/test 時,須要跳轉到 http://jochen.com/ ,此時能夠配置一個跳轉:html

location = /test/ {
    return 302 http://jochen.com/;
}
3. 配置訪問控制

有時,咱們須要對訪問作一些限制。好比,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;
}
4. 列出目錄

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

  1. nginx 服務器安裝及配置文件詳解
  2. 前端工程師學習 Nginx 入門篇
  3. Module ngx_http_stub_status_module
相關文章
相關標籤/搜索