nginx 代理程式配置中來自外部來源的動態變數

nginx 代理程式配置中來自外部來源的動態變數

我需要在作為代理的 nginx 中執行一些條件操作。基本上,這一切都歸結為能夠從外部來源設定一些 nginx 變數。它可以是 bash 腳本或由 url 產生的結果或類似的東西。

例如:

set $var = [result of http request]

或者

set $var = [result of bash command]

對此有可靠的解決方案嗎?模組?如果使用 nginx 不是個好主意,還有什麼替代方案?

答案1

解決方案是使用lua模組執行簡單的lua腳本來執行必要的處理。簡單的例子:

location / {
  # Get device type from lua script.
  # Note: do not use content_by_lua as it's executed in separate context.
  set_by_lua_file $device_type 'device-detect.lua';

  # Do what needs to be done...
}

lua 腳本傳回的任何內容都位於$device_type變數內。

需要記住的重要一點是,在大多數 Linux 發行版上,lua 模組是 nginx-extras 套件的一部分,必須安裝它而不是標準的 nginx-core。

答案2

Nginx 有很多內建變數[1] 你可以使用這樣的東西:

#Default to EN
set $vislang "EN";
#Discriminate language
if ($http_accept_language ~* "^fr") {
    set $vislang "FR";
}

基於 bash 的解決方案可能是“sed -i nginx_conf_file && service nginx reload”,但我認為它不是很乾淨。

[1]http://nginx.org/en/docs/http/ngx_http_core_module.html#variables

相關內容