nginx 변수가 설정되어 있는지 테스트 { set $foo default-value; } 그러나 런타임

변수를 아직 설정하지 않은 경우 기본값으로 설정해야합니다. 다음 구성이 작업을 수행합니다.

if ($foo ~ "^$") {
   set $foo default-value;
}

그러나 런타임 경고가 생성됩니다.

초기화되지 않은 “foo”변수 사용

경고를 생성하지 않고 전역으로 경고를 끄지 않고 변수가 설정되었는지 테스트하는 방법이 있습니까?

uninitialized_variable_warn off;



답변

변수가 존재하는지 확인하기 위해 다음을 사용하고 있습니다.

if ($dir = false) {
    set $dir "";
}

이 위치 블록에 도달하기 전에 설정되지 않으면 빈 문자열로 설정됩니다. 따옴표 사이에 문자열을 쉽게 추가 할 수 있습니다. 이것을 사용하여 구성 테스트를 수행 할 때 오류가 발생하지 않습니다.

다른 내용이 있으면 알려주세요.


답변

를 사용하는 쿼리 매개 변수 값에 대해 동작이 변경되었거나 최소한 다른 것으로 보입니다 $arg_<name>. nginx 1.13.6에서 다음을 사용하여 ngx 변수에 쿼리 값이 있는지 확인하십시오.

if ($arg_test = false) {
    default_type 'text/plain';
    return 404;
}

404로 전달되지 않습니다.

if ($arg_test = '') {
    default_type 'text/plain';
    return 404;
}

쿼리 매개 변수가 없으면 404를 반환합니다. 필수 쿼리 매개 변수가없는 경우 업스트림에 도달하지 않는 데 유용합니다.


답변

만약 GET QUERY매개 변수를 감지

예 : foo.com?proxy
proxy변수가 존재하지 않습니다$arg_proxy


if ($args ~ '(&|^)proxy([&=]|$)' ) { #exists
set $port '8080';
}

https://forum.nginx.org/read.php?2,224860,224860


답변

포함 된 파일에서 변수를 선택적으로 설정하는 경우 쉬운 옵션은 단순히 기본값을 먼저 설정하는 것입니다.

set $value 'default';
include maybe-set-value.conf;

conf 파일의 두 번째 set 문은 기본값을 대체합니다.


답변