nginx 프록시 구성의 외부 소스에서 가져온 동적 변수

nginx 프록시 구성의 외부 소스에서 가져온 동적 변수

프록시로 작동하는 nginx에서 몇 가지 조건부 작업을 수행해야 합니다. 기본적으로 모든 것은 외부 소스에서 일부 nginx 변수를 설정할 수 있다는 점으로 요약됩니다. bash 스크립트일 수도 있고 url 등으로 생성된 결과일 수도 있습니다.

예를 들어:

set $var = [result of http request]

또는

set $var = [result of bash command]

이에 대한 신뢰할 수 있는 솔루션이 있습니까? 모듈? nginx를 사용하는 것이 좋지 않다면 대안은 무엇입니까?

답변1

해결책은 다음과 같습니다.루아 모듈간단한 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...
}

루아 스크립트가 반환한 것은 무엇이든 $device_type변수 안에 들어갑니다.

기억해야 할 중요한 점은 대부분의 Linux 배포판에서 lua 모듈은 표준 nginx-core 대신 설치해야 하는 nginx-extras 패키지의 일부라는 것입니다.

답변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

관련 정보