PUT 요청에 nginx reverse_proxy를 사용하는 방법은 무엇입니까?

PUT 요청에 nginx reverse_proxy를 사용하는 방법은 무엇입니까?

다른 웹 애플리케이션 앞에서 nginx를 역방향 프록시로 사용하면 PUT요청을 전달하지 않는 것 같지만 nginx(업스트림 서버가 아님)에서 생성된 HTTP 405가 표시됩니다.

http_405에 대한 방법을 시도했지만 proxy_next_upstream작동하지 않았습니다. 왜 nginx 자체가 reverse_proxy가 구성된 위치 블록에 대해 HTTP 메서드를 확인하는지 궁금합니다.

답변1

Nginx는 여기서 문제가 되지 않습니다. 요청과 일치 PUT하는 경우 예상대로 역방향 프록시 블록으로 요청을 전달합니다 .location

location이미지가 역방향 프록시를 통해 제공되지 않도록 하는 또 다른 지시문이 있습니다 . .png결국 모든 항목(및 일부 다른 파일 확장자)과 일치했으며 업로드 URL도 일치했습니다.

잘못된 위치 블록의 경우 오류 405가 정확합니다. 해결책은 업로드 요청이 실제로 역방향 프록시로 전달되는지 확인하는 것입니다.


작동하는 역방향 프록시 구성의 예:

# proxy requests for /upload the a webapp, which implements PUT
location ^~ /upload {
    proxy_pass "https://backendserver:1234/something";
    proxy_http_version 1.1;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_buffering off;
    tcp_nodelay on;
}

우선 순위가 높은 다른 위치 블록이 없으면 구성이 제대로 작동합니다.
내 문제는 또 다른 블록이었습니다.

# This block matched requests for /upload/somefile.png before the proxy block
location ~* ^(/.*png|/.*jpg|/.*jpeg|/.*gif)$ {
    # some directives without proxy_pass
}

관련 정보