tengo una ubicacion
location /pass/ {
proxy_pass http://localhost:12345/;
}
Por lo tanto, se supone que debe proxificar las URL http://example.com/pass/whatever
ahttp://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 /pass
sin barra diagonal ir a otra ubicación. ¡Gracias de antemano!
Respuesta1
Hay un caso especial en el que una proxy_pass
terminación location
en /
daría como resultado una 301
redirección implícita automática sin tener que ir al backend; tienes que crear un explícito location
sin 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
location
ademá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 /pass
a /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.