답변:
이 구성을 사용하지 않지만 여기 예제를 기반으로합니다 .
location /service {
if ($request_method = POST ) {
fastcgi_pass 127.0.0.1:1234;
}
if ($request_method = GET ) {
alias /path/to/files;
}
}
자신의 응용 프로그램을 작성하는 경우 GET / POST를 확인 하고 파일 전송을 nginx로 전달하기 위해 X-Accel-Redirect 헤더를 보내는 것을 고려할 수도 있습니다 .
if
일반적으로 Nginx의 문서에 의해 권장하지 않습니다 : nginx.com/resources/wiki/start/topics/depth/ifisevil
으로이 작업을 수행 할 수 있지만 if
일반적으로 Nginx 설명서 에서는 권장if
하지 않습니다. 다른 지시어와 잘 작동하지 않기 때문 입니다. 예를 들어, 모든 사람이 GET을 열어야하고 POST는 HTTP 기본 인증을 사용하는 인증 된 사용자만을위한 것이라고 가정하십시오. 제대로 작동하지 if
않는와 결합 해야 합니다 auth_basic
.
없이 작동하는 대안이 있습니다 if
. 트릭은 업스트림 이름의 일부로 "GET"및 "POST"를 사용하는 것이므로 변수 대체를 통해이를 해결할 수 있습니다.
http {
upstream other_GET {
server ...;
}
upstream other_POST {
server ...;
}
server {
location /service {
proxy_pass http://other_$request_method;
}
}
}
GET 이외의 모든 것에 대해 이것을 HTTP 기본 인증과 결합하려면 limit_except
블록을 추가하십시오 .
...
location /service {
proxy_pass http://other_$request_method;
limit_except GET {
auth_basic ...;
}
}
...
502 gateway error
인해 돌아올 것 no resolver defined to resolve other_HEAD
입니다. 와 같은 것을 반환하는 것이 더 의미가 있습니다 405 method not allowed
. 이것을 달성 할 수있는 방법이 있습니까?
OPTIONS, PUT 등과 같은 다른 메소드에 대한 기본 핸들러를 포함하도록 vog의 답변으로 약간 변경되었습니다.
upstream webdav_default {
server example.com;
}
upstream webdav_upload {
server example.com:8081;
}
upstream webdav_download {
server example.com:8082;
}
server {
map upstream_location $request_method {
GET webdav_download;
HEAD webdav_download;
PUT webdav_upload;
LOCK webdav_upload;
default webdav_default;
}
location / {
proxy_pass https://$upstream_location;
}
}