搜尋
首頁運維NginxNginx中Server和Location的匹配邏輯是什麼

server的匹配邏輯

nginx在決定請求由哪個server區塊執行時,主要關注的是server區塊中的listen和server_name兩個欄位

listen指令

listen欄位定義server回應的ip和連接埠,如果沒有明確配置listen欄位,預設監聽0.0.0.0:80(root)或0.0.0.0:8080 (非root)

listen可以被設定為:

  1. 一個ip和連接埠的組合

  2. 一個單獨的ip ,預設監聽80埠

  3. 一個單獨的連接埠,預設監聽所有的ip介面

  4. ##一個unix socket路徑

#其中最後一項通常只用於在不同的server之間傳遞請求

選擇要使用的server的規則如下:

  1. nginx首先將所有"不完整"的listen指令進行轉換,例如沒有listen字段的轉換為listen 0.0.0.0:80,listen 1.1.1.1轉換為listen 1.1.1.1:80等

  2. nginx根據請求的ip和連接埠建立一個與請求最匹配的server區塊清單,優先匹配指定了特定ip的server區塊,其次才會選擇listen 0.0.0.0的這種server區塊.但是無論是哪種情況,端口必須是完全匹配的

  3. 如果只有一個最佳匹配,那麼將使用匹配的server塊響應請求,否則開始評估每一個server塊的server_name指令

再次強調一遍,只有當listen指令無法找到最佳匹配時才會考慮評估server_name指令.

例如,我們假設example.com網域指向了192.168.0.1,且位於192.168.0.1上的nginx有且僅有以下兩個server區塊:

# server block 1server {
  listen 192.168.0.1;
  server_name other.com
  ...
}

# server block 2server {
  listen 80;
  server_name example.com
  ...
}

server_name指令

如果根據listen指令無法得到最佳匹配,將會開始解析server_name指令.nginx會檢查請求中的"host"頭,這個值包含了客戶端實際試圖請求的網域或ip位址.nginx會根據這個值去匹配server_name指令,符合規則如下:

  1. #nginx會嘗試尋找一個和sever_name和host值完全匹配的server塊,如果找到多個精確匹配,則會使用第一個匹配的server塊

  2. 如果沒有找到精確匹配的server塊,則nginx嘗試找到server_name帶有*開頭的server塊,如果找到多個,則選擇最長匹配的server塊

  3. 如果沒有找到使用開頭的server塊,則會尋找以結尾的server塊,同樣,如果有多個匹配, 選擇最長匹配

  4. 如果沒有找到使用*匹配的server塊,則會尋找使用正規表示式(以~開頭)定義server_name的server區塊,如果找到多個匹配,會使用第一個匹配

  5. 如果沒有找到正規表示式匹配的server區塊,則nginx將會選擇一個符合listen欄位的default server區塊.每一個ip和連接埠組合都可以配置一個且只能配置一個預設的default_server區塊,如果沒有的話,則會選擇可用清單中的第一個server(此時的選擇是隨機的,順序不固定)

範例如下:

(1)準確的server_name符合,例如:

server {
   listen    80;
   server_name www.domain.com;
   ...
}

(2)以*通配符開始的字串:

server {
   listen    80;
   server_name *.domain.com;
   ...
}

(3)以*通配符結束的字串:

server {
   listen    80;
   server_name www.*;
   ...
}

(4)符合正規表示式:

server {
   listen    80;
   server_name ~^(?.+)\.domain\.com$;
   ...
}

(5)如果以上都沒有匹配,則使用default_server.如果沒有指定default_server,則會選擇第一個可用的server.我們可以指定對於沒有匹配的host值時,返回錯誤到客戶端.可以用來防止別人把垃圾流量轉到你的網站。

server {
  listen 80  default_server;
  server_name _;  return 444;
}

透過回傳444這個nginx的非標準錯誤碼讓nginx斷開與瀏覽器的連線

location的符合邏輯

 

location語法解析

location optional_modifier location_match {
  ...
}

其中可用的modifier修飾符如下

Nginx中Server和Location的匹配邏輯是什麼

#判定規則

1、nginx首先檢查基於前綴的location匹配(即不包含正規表示式的匹配)

2、如果有使用=修飾符的location塊與請求的url完全匹配,則立刻使用該location響應請求

#3、如果沒有找到帶有=修飾符的location塊匹配,則會繼續計算非精確前綴,根據給定的uri找到最長匹配前綴,然後進行如下處理:

(1)如果最長的匹配location帶有^~修飾符,nginx立刻使用該location回應請求

(2)如果最長的匹配location不帶有^~修飾符,nginx會將該匹配暫時存起來,然後繼續後續匹配

4、在確定並儲存最長匹配的前綴location塊後,nginx繼續檢查正則表達式匹配location(區分大小寫/不區分大小寫).如果存在正則表達式滿足要求的匹配,則會選擇與請求的uri匹配的第一個正則表達式的location來相應請求

#5、如果沒有找到與請求的uri匹配的正則表達式location,則使用之前儲存的最長前綴location回應請求

補充

通常情況下,一旦選擇使用某一個location回應請求,那麼請求將會在該location內部進行處理,而與其他location無關.但是location中某些指令會觸發新的location匹配,例如:

(1)try_files

(2)rewrite

(3)error_page

以上是Nginx中Server和Location的匹配邏輯是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:亿速云。如有侵權,請聯絡admin@php.cn刪除
NGINX與Apache:網絡託管和流量管理NGINX與Apache:網絡託管和流量管理Apr 12, 2025 am 12:04 AM

NGINX适合高并发和低资源消耗场景,Apache适用于需要复杂配置和功能扩展的场景。1.NGINX以高性能处理大量并发连接著称。2.Apache以稳定性和丰富模块支持见长。选择时需根据具体需求决定。

NGINX:現代Web應用程序的多功能工具NGINX:現代Web應用程序的多功能工具Apr 11, 2025 am 12:03 AM

NGINXisessentialformodernwebapplicationsduetoitsrolesasareverseproxy,loadbalancer,andwebserver,offeringhighperformanceandscalability.1)Itactsasareverseproxy,enhancingsecurityandperformancebycachingandloadbalancing.2)NGINXsupportsvariousloadbalancingm

NGINX SSL/TLS配置:使用HTTPS確保您的網站NGINX SSL/TLS配置:使用HTTPS確保您的網站Apr 10, 2025 am 09:38 AM

通過Nginx配置SSL/TLS來確保網站安全,需要以下步驟:1.創建基本配置,指定SSL證書和私鑰;2.優化配置,啟用HTTP/2和OCSPStapling;3.調試常見錯誤,如證書路徑和加密套件問題;4.應用性能優化建議,如使用Let'sEncrypt和會話復用。

NGINX面試問題:ACE您的DevOps/System Admin面試NGINX面試問題:ACE您的DevOps/System Admin面試Apr 09, 2025 am 12:14 AM

Nginx是高性能的HTTP和反向代理服務器,擅長處理高並發連接。 1)基本配置:監聽端口並提供靜態文件服務。 2)高級配置:實現反向代理和負載均衡。 3)調試技巧:檢查錯誤日誌和測試配置文件。 4)性能優化:啟用Gzip壓縮和調整緩存策略。

NGINX緩存技術:改善網站性能NGINX緩存技術:改善網站性能Apr 08, 2025 am 12:18 AM

Nginx缓存可以通过以下步骤显著提升网站性能:1)定义缓存区和设置缓存路径;2)配置缓存有效期;3)根据不同内容设置不同的缓存策略;4)优化缓存存储和负载均衡;5)监控和调试缓存效果。通过这些方法,Nginx缓存能减少后端服务器压力,提升响应速度和用户体验。

帶Docker的NGINX:部署和縮放容器化應用程序帶Docker的NGINX:部署和縮放容器化應用程序Apr 07, 2025 am 12:08 AM

使用DockerCompose可以簡化Nginx的部署和管理,通過DockerSwarm或Kubernetes進行擴展是常見的做法。 1)使用DockerCompose定義和運行Nginx容器,2)通過DockerSwarm或Kubernetes實現集群管理和自動擴展。

高級NGINX配置:掌握服務器塊和反向代理高級NGINX配置:掌握服務器塊和反向代理Apr 06, 2025 am 12:05 AM

Nginx的高級配置可以通過服務器塊和反向代理實現:1.服務器塊允許在一個實例中運行多個網站,每個塊獨立配置。 2.反向代理將請求轉發到後端服務器,實現負載均衡和緩存加速。

NGINX性能調整:針對速度和低潛伏期進行優化NGINX性能調整:針對速度和低潛伏期進行優化Apr 05, 2025 am 12:08 AM

Nginx性能調優可以通過調整worker進程數、連接池大小、啟用Gzip壓縮和HTTP/2協議、使用緩存和負載均衡來實現。 1.調整worker進程數和連接池大小:worker_processesauto;events{worker_connections1024;}。 2.啟用Gzip壓縮和HTTP/2協議:http{gzipon;server{listen443sslhttp2;}}。 3.使用緩存優化:http{proxy_cache_path/path/to/cachelevels=1:2k

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版