변수를 아직 설정하지 않은 경우 기본값으로 설정해야합니다. 다음 구성이 작업을 수행합니다.
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 문은 기본값을 대체합니다.