¿Cómo utilizar nginx reverse_proxy para solicitudes PUT?

¿Cómo utilizar nginx reverse_proxy para solicitudes PUT?

Cuando uso nginx como proxy inverso frente a alguna otra aplicación web, parece no reenviar PUTsolicitudes, pero muestra un HTTP 405 generado por nginx (y no por el servidor ascendente).

Probé el proxy_next_upstreammétodo para http_405, pero no funcionó. Me pregunto por qué el propio nginx verifica el método HTTP de todos modos para detectar un bloque de ubicación que tiene un proxy_inverso configurado.

Respuesta1

Nginx no es el problema aquí. Reenvía PUTsolicitudes en bloques de proxy inverso como se esperaba, si locationcoincide con la solicitud.

Tenía otra locationdirectiva, que garantiza que las imágenes no se entreguen a través del proxy inverso. Al final coincidió con todo .png(y algunas otras extensiones de archivo), lo que también coincidió con las URL de carga.

Para el bloque de ubicación incorrecto, el error 405 es correcto. La solución es asegurarse de que las solicitudes de carga se reenvíen realmente al proxy inverso.


Un ejemplo de una configuración de proxy inverso funcional:

# 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;
}

La configuración funciona bien, si no hay otros bloques de ubicación que tengan prioridad.
Mi problema fue otro bloque:

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

información relacionada