Nginx

多個 nginx 語句可以在配置文件的同一行嗎?

  • August 8, 2019

問題

我正在創建一個基於環境變數動態創建 nginx 配置的 docker 映像。我想盡量減少所需的環境變數數量。

我有一個看起來像這樣的配置模板文件:

server {
...
 $ALLOW_DENY
...
}

我想像這樣配置模板

export ALLOW_DENY="allow 11.11.11.11; deny all;"
envsubst '\$ALLOW_DENY' < sites-available/site.template > sites-available/my-site

我的問題是我不想為每個允許或拒絕語句創建多個環境變數(此文件的某些配置可能不需要,而其他配置可能需要 5 或 6 個)但我找不到讓envsubst接受換行符的方法字元,我不確定是否允許在一行中使用多個 nginx 命令。

作為參考,我將使用載入我的所有環境變數aws ssm,我認為它不接受這樣的多行環境變數:

export $ALLOW_DENY="  allow 11.11.11.11;
 deny all;"

tl;博士

這是有效的嗎?

server {
...
 allow 11.11.11.11; deny all;
...
}

是的。儘管我強烈建議自由使用空格、換行符和include語句來增加可讀性——最終由你決定在方便的地方跳過換行符——nginx 只處理特殊的換行符,以便能夠指出發生配置解析器錯誤的行。

nginx 配置文件只不過是花括號分隔的塊中以分號分隔的指令 - 除了類似於空格和製表符的解析之外,換行符是無關緊要的:

一個簡單的指令由名稱和參數組成,由空格分隔並以分號 (;) 結尾。塊指令與簡單指令具有相同的結構,但它不是以分號結尾,而是以一組用大括號({ 和 })包圍的附加指令結束。

您不想在一行中進行太多配置的唯一原因是可讀性 - 註釋只能在一行的基礎上進行:

符號之後的其餘行被視為註釋。

Nginx 初學者指南

引用自:https://serverfault.com/questions/978495