我有多個由 Nginx 管理的虛擬主機。
我收到一張票,要求我驗證某些虛擬主機的請求標頭的值,如果標頭不存在或無效,則拒絕提供請求。這是我添加到每個虛擬主機的內容:
location / {
if ($http_my_request_header_name != "<mytoken>") {
return 406;
}
}
這正在按預期作業。但是,我打算讓這個解決方案更優雅,并創建一個名為 common.conf 的新組態檔,并且不是將相同的代碼粘貼到所有虛擬主機中,而是包含這個公共檔案,如下所示:
include conf.d/common.conf;
然而,我的嘗試都失敗了:
第一次嘗試
粘貼if條件并將location指令留在虛擬主機中,這將include是檔案。我收到的錯誤是在日志中告訴我我不能if在檔案中單獨包含一個。
第二次嘗試
我已經移動了整個
location / {
if ($http_my_request_header_name != "<mytoken>") {
return 406;
}
}
進入公共檔案并將其替換include為虛擬主機配置中的。我收到的錯誤是告訴我我需要在server指令周圍包裝一個location指令。
第三次嘗試
我已經在我的位置指令周圍包裹了一個服務器指令,但它也出錯了。我不再有錯誤,因為從那時起我銷毀了服務器并重新創建了它。但是,如果需要確切的錯誤訊息,請告訴我,我將復制它并在此處分享。
問題
如何創建一個通用組態檔來驗證請求標頭并將其包含到多個虛擬主機配置中?
編輯
鑒于 Rahul Sharma 的回答,我正在提供有關當前嘗試的更多資訊。這是當前主要 conf 的樣子:
server {
...
include conf.d/common.conf;
...
}
并且include是指令的直接子級server,也就是說,include. Earlier, instead of the include 行周圍沒有其他內容,主 conf 有它的內容,比如
server {
...
location / {
if ($http_my_request_header_name != "<mytoken>") {
return 406;
}
}
...
}
它奏效了。我確實將 .conf 檔案移到location /了 common.conf 檔案中,并將其替換為include. 因此,Nginx 出于某種原因不喜歡我的其他檔案。這就是為什么它對我來說很奇怪,這就是導致我問這個問題的原因。
uj5u.com熱心網友回復:
我假設您的conf.d/common.conf檔案內容是:
location / {
if ($http_my_request_header_name != "<mytoken>") {
return 406;
}
}
錯誤
/etc/nginx/conf.d/common.conf 中不允許使用“位置”指令
是因為您include在 main 中的陳述可能nginx.conf放錯了位置。該行include conf.d/common.conf;應該在一個server塊內,這樣才能像這樣作業:
server {
...
...
include conf.d/common.conf;
...
...
}
uj5u.com熱心網友回復:
原來在nginx.conf中有一行
include /etc/nginx/conf.d/*.conf;
其中包括我不知道的另一個地方的 common.conf,而在第二個地方,common.conf 中的代碼無效。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/516542.html
標籤:验证nginx虚拟主机
上一篇:如何驗證來自檔案流的錯誤輸入?
