Como usar o nginx reverse_proxy para pedidos PUT?

2

Quando uso o nginx como proxy reverso na frente de algum outro aplicativo da Web, ele parece não encaminhar PUT solicitações, mas mostra um HTTP 405 gerado pelo nginx (e não pelo servidor upstream).

Eu tentei o método proxy_next_upstream para http_405, mas não funcionou. Eu me pergunto por que o próprio nginx verifica o método HTTP de qualquer maneira para um bloco de localização que tenha um reverse_proxy configurado.

    
por allo 08.09.2018 / 15:37

1 resposta

0

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
}
    
por 08.09.2018 / 18:06