nginx 변수가 설정되어 있는지 테스트


14

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

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

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

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

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

uninitialized_variable_warn off;


2
비슷한 것을 찾는 동안 이것을 찾았지만 uninitialized_variable_warn전역 적으로 설정할 필요가없는 것 같습니다 . 초기화되지 않은 변수를 사용해야하는 곳에 설정할 수 있습니다. SSL 세부 정보를 PHP에 전달하는 데 이것을 사용하고 있습니다 .SSL없이 페이지에 액세스하면 비어 있습니다.
하라 빅

@Haravikk 그것은 사실이 아닌 것 같습니다nginx: [emerg] "uninitialized_variable_warn" directive is duplicate in
n1te

여전히 다른 곳에 설정되어 있습니까? PHP를 지원하는 위치에서만 가져 오는 uninitialized_variable_warn부분의 일부로 사용 하고 php.conf있기 때문에 다른 곳에서는 경고를 남기지 않고 해당 범위에서만 사용하고 있습니다. uninitialized_variable_warn그래도 다른 범위에서 설정 하지 않았습니다 (기본값은 true).
하라 빅

답변:


11

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

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

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

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


[EMERG] 알 수없는 "DIR"변수 : 나는 nginx를보고 있어요
알렉스 바커

이 잘못된 확인은 더 이상 작동하지 않습니다. 다음을 사용하십시오$foo ~ "^$"
Valdrinium

1

를 사용하는 쿼리 매개 변수 값에 대해 동작이 변경되었거나 최소한 다른 것으로 보입니다 $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를 반환합니다. 필수 쿼리 매개 변수가없는 경우 업스트림에 도달하지 않는 데 유용합니다.



0

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

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

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.