先敘述一下環境。
伺服器nginx上面配置了多個網域名稱,其中網域名稱是分散放在多個目錄下,按業務來劃分的,然後再 nginx.conf 中國通過include來引用。
最近新增乙個業務,只 listen 80;不配置server_name,計畫是讓沒有匹配到server_name的網域名稱,通過此項配置來訪問到後端的應用。該網域名稱單獨建立乙個目錄,並通過include配置到nginx.conf中,由於有多個include,新增的預設加到最後面。
想法很好,然而在測試的過程中發現了新的問題。訪問某個不匹配的網域名稱是,發現位址被強跳到了https,反覆檢查了新增的網域名稱配置,並沒有rewrite的操作,nginx.conf 也無異常。最後發現是include引用順序的問題。第乙個include中,某些server塊中含有rewrite的配置。
可見,在尋找server_name的過程中,發現沒有匹配到任何乙個server_name,然後就預設走第乙個server塊,其中有rewrite的配置,因此出現了強跳https的情況。
在開始處理乙個http請求時,nginx會取出header頭中的host,與配置檔案中每個server的server_name進行匹配,以此決定到底由哪乙個server塊來處理這個請求。如果server_name 匹配失敗,並且listen沒有default屬性,那麼埠號和server的順序將發揮作用,它會去找埠匹配的位置最靠前的server塊。
最後說一下匹配順序:
如果都不匹配:
nginx中server name的匹配順序
nginx中的server name指令主要用於配置基於名稱虛擬主機,server name指令在接到請求後的匹配順序分別為 1 準確的server name匹配,例如 server 2 以 萬用字元開始的字串 server 3 以 萬用字元結束的字串 server 4 匹配到的正規表示式 serv...
Spring interceptor執行順序
spring interceptor是按list的順序來執行的。如果某乙個interceptor直接return而不去呼叫invocation.proceed 獲得返回值的話,接下來的interceptor也不會要執行。例如 表的查詢和快取,應該先執行查詢cache,然後再判斷是否啟動事務進行查詢資...
HiveQL collect list保持順序小記
有以下hive表的定義 create table topic recommend score category id int,topic id bigint,score double,rank int 這張表是我們業務裡話題推薦分值表的簡化版本。category id代表分類id,topic id是...