나는 다음과 같은 것을 달성하려고 노력하고 있습니다.
location /location1/{
if ($arg_api_key = a_valid_api_key) {
proxy_pass http://localhost:8080;
}
# else jump to location2
}
location /location2/{
# a lot of validation code here
}
nginx에서는 어떻게 하나요? 아니면 그것을 처리하는 더 좋은 방법이 있습니까?
답변1
먼저, 이것을 기억하세요만약에 악하다rewrite
또는 return
내부를 제외하고는 아무것도 넣지 마십시오 if
. 요청을 처리하는 데 사용되는 위치를 사용 error_page
하고 변경하는 것이 제안된 해결 방법입니다.return
처럼여기에 이미 답변했습니다, nginx에서 위치 설정을 재사용하는 방법은 해당 설정을 별도의 파일과 블록 include
의 해당 파일 로 이동하는 것입니다 location
.
이러한 솔루션을 결합하면 다음과 같은 결과를 얻을 수 있습니다.
/etc/nginx/validation_code.conf
# a lot of validation code here
주요 구성
location /location1/ {
error_page 418 = @proxy;
recursive_error_pages on;
if ($arg_api_key = a_valid_api_key) {
return 418;
}
include /etc/nginx/validation_code.conf;
}
location /location2/ {
include /etc/nginx/validation_code.conf;
}
location @proxy {
proxy_pass http://localhost:8080;
}
별도의 파일을 만드는 대신 유효성 검사 코드에 이름이 지정된 위치를 사용하는 것도 고려해 볼 수 있습니다. 그러나 해당 명명된 위치로 전환하려면 몇 가지 트릭이 필요합니다. 예를 들어 다른 error_page
/ return
쌍 또는 이와 유사한 것
try_files /nonexistent @validation