728x90
반응형
if 조건식
Syntax: if (condition) { ... }
Context: server, location
- NGINX의 if 조건식에서는
condition
부분에 여러 가지가 올 수 없고 한 가지 조건만 가능합니다.
if 조건식 내 condition
- 변수 이름을 넣어 해당 변수가
빈 문자열
이거나0
이면 false로 간주합니다. =
나!=
연산자를 사용하여 변수를 문자열과 비교합니다.~
및~*
연산자를 사용하여 정규 표현식에 대해 변수가 일치하는지 비교합니다.!~
및!~*
은 정규 표현식에 대해 변수가 일치하지 않는지 비교합니다.-f
및!-f
연산자로 파일 존재를 확인합니다.-d
및!-d
연산자로 디렉토리 존재를 확인합니다.-e
및!-e
연산자를 사용하여 파일, 디렉토리 및 심볼릭 링크 존재를 확인합니다.-x
및!-x
연산자를 사용해 실행 파일을 확인합니다.
if 조건식 사용 예시
if ($invalid_referer) {
return 403; // invalid_referer이면 403 forbidden 반환 (valid_referers 값에 의해 invalid_referer 값 설정됨)
}
if ($request_method = POST) {
return 405; // HTTP method가 POST이면 405 not allowed 반환
}
if ($http_user_agent !~ "^google") {
return 403; // user agent가 google로 시작하지 않으면 403 forbidden 반환
}
if 조건식 내 multiple condition 사용하기
NGINX의 if 조건식은 다중 조건을 사용할 수 없습니다. 따라서, 아래와 같이 우회하여 사용해야 합니다.
OR 조건을 사용하고자 하는 경우
if ($host = 'earth-95.com' || $host = 'earth-test.com') {
rewrite ^/(.*)$ http://earth.com/$1 permanent;
}
예를 들어, 위와 같이 $host가 earth-95.com이거나 earth-test.com일 때 earth.com으로 전체 url을 redirect하고 싶다면 아래와 같이 변수를 하나 만들어 작성할 수 있습니다.
set $my_or_condition 0;
if ($host = 'earth-95.com') {
set $my_or_condition 1;
}
if ($host = 'earth-test.com') {
set $my_or_condition 1;
}
if ($my_or_condition = 1) {
rewrite ^/(.*)$ http://earth.com/$1 permanent;
}
- $host가 earth-95.com이거나 earth-test.com일 때 모두 $my_or_condition 변수가 1이 되어 rewrite 구문을 수행하기 때문에 OR 조건에 해당합니다.
AND 조건을 사용하고자 하는 경우
if ($host = 'earth-test.com' && $request_method = GET) {
rewrite ^/(.*)$ http://earth.com/$1 permanent;
}
예를 들어, 위와 같이 $host가 earth-test.com이고 request_method가 GET일 때에만 redirect를 하고자 한다면 아래와 같이 수행할 수 있습니다.
set $my_and_condition 1;
if ($host = 'earth-test.com') {
set $my_and_condition 2$my_and_condition;
}
if ($request_method = GET) {
set $my_and_condition 3$my_and_condition;
}
if ($my_and_condition = "321") {
rewrite ^/(.*)$ http://earth.com/$1 permanent;
}
- $host가 earth-test.com이고, $request_method가 GET이어야 $my_and_condition 변수가 321이 되기 때문에 AND 조건에 해당합니다.
참고 자료
728x90
반응형
'OPEN SOURCE > NGINX' 카테고리의 다른 글
[NGINX] forward proxy와 reverse proxy (0) | 2022.02.19 |
---|---|
[NGINX] Directory Indexing 사용하기 (0) | 2021.02.21 |