Redirección de ubicación no deseada de nginx con barra diagonal final

Redirección de ubicación no deseada de nginx con barra diagonal final

tengo una ubicacion

location /pass/ {
    proxy_pass http://localhost:12345/;
}

Por lo tanto, se supone que debe proxificar las URL http://example.com/pass/whateverahttp://localhost:12345/whatever

Lo que no me gusta es que nginx agrega automáticamente una barra diagonal a

http://example.com/pass

y lo hace http://example.com/pass/a través de redirección 301

¿Cómo puedo simplemente evitar este comportamiento? Quiero /passsin barra diagonal ir a otra ubicación. ¡Gracias de antemano!

Respuesta1

Hay un caso especial en el que una proxy_passterminación locationen /daría como resultado una 301redirección implícita automática sin tener que ir al backend; tienes que crear un explícito locationsin la barra diagonal para evitar esto:

Si una ubicación está definida por una cadena de prefijo que termina con el carácter de barra diagonal y las solicitudes se procesan mediante proxy_pass, fastcgi_pass, uwsgi_pass, scgi_pass, memcached_pass o grpc_pass, entonces se realiza el procesamiento especial. En respuesta a una solicitud con un URI igual a esta cadena, pero sin la barra diagonal, se devolverá una redirección permanente con el código 301 al URI solicitado con la barra diagonal adjunta. Si no se desea esto, se podría definir una coincidencia exacta del URI y la ubicación de esta manera:

location /user/ {
    proxy_pass http://user.example.com;
}

location = /user {
    proxy_pass http://login.example.com;
}

Por ejemplo, debe crear un explícito /pass locationademás del existente ; de ​​lo contrario, se creará /pass/un implícito .location /pass {return 301 /pass/…;}

Sin embargo, ¿está seguro de que realmente quiere hacer lo que está intentando hacer? Si va a omitir una redirección desde /passa /pass/, las rutas relativas no funcionarán. Algunos navegadores más nuevos también tienden a presentar una UI/UX defectuosa que puede no presentar la barra diagonal al usuario, lo que puede hacer que las cosas sean aún más confusas al intentar solucionar el problema de la distinción.

Respuesta2

Como quieres que vayaotra localización, una solución natural es agregar esa ubicación

location /pass {
}

De forma predeterminada, nginx buscará un archivo llamado "pass" en la raíz web. Si no le gusta este valor predeterminado, puede agregar más directivas dentro de este nuevo bloque de ubicación para lograrlo.

También puedes usar

location = /pass {
}

de modo que nginx pueda encontrar la coincidencia un poco más rápido.

información relacionada