Nginx não é o problema aqui. Encaminha solicitações de PUT
em blocos de proxy reverso conforme esperado, se o location
corresponder à solicitação.
Eu tinha outra diretiva location
, que garante que as imagens não sejam exibidas por meio do proxy reverso. Ele combinou tudo com .png
(e algumas outras extensões de arquivo) no final, o que também correspondia ao upload-urls.
Para o bloco de localização incorreto, o erro 405 está correto. A solução é garantir que as solicitações de upload sejam realmente encaminhadas para o proxy reverso.
Um exemplo de configuração de proxy reverso em funcionamento:
# 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;
}
A configuração funciona bem, se não houver outros blocos de localização, que tenham precedência.
Meu problema foi outro bloqueio:
# This block matched requests for /upload/somefile.png before the proxy block
location ~* ^(/.*png|/.*jpg|/.*jpeg|/.*gif)$ {
# some directives without proxy_pass
}