redirect - proxy_pass - Configuración de Nginx para una aplicación de una página con caché de aplicaciones HTML5
proxy inverso apache (1)
Intento crear una aplicación de una sola página que utilice el caché de aplicaciones HTML5, que almacenará en caché una versión completamente nueva de la aplicación para cada URL distinta, así que debo redirigir a todos a /
y hacer que mi aplicación los dirija después (esta es la solución utilizado en devdocs.io ).
Aquí está mi configuración de nginx. Quiero que todas las solicitudes envíen un archivo si existe, redireccionar a mi API en /auth
y /api
, y redirigir todas las demás solicitudes a index.html. ¿Por qué la siguiente configuración hace que mi navegador diga que hay un bucle de redireccionamiento? Si el usuario golpea el bloque de ubicación n. ° 2 y su ruta no coincide con un archivo estático, se lo envía al bloque de ubicación n. ° 3, que lo redireccionará a "/", que debe llegar al bloque de ubicación n. ° 1 y servir a index.html, ¿correcto? ¿Qué está causando el bucle de redirección aquí? ¿Hay una mejor manera de lograr esto?
root /files/whatever/public;
index index.html;
# If the location is exactly "/", send index.html.
location = / {
try_files $uri /index.html;
}
location / {
try_files $uri @redirectToIndex;
}
# Set the cookie of the initialPath and redirect to "/".
location @redirectToIndex {
add_header Set-Cookie "initialPath=$request_uri; path=/";
return 302 $scheme://$host/;
}
# Proxy requests to "/auth" and "/api" to the server.
location ~* (^//auth)|(^//api) {
proxy_pass http://application_upstream;
proxy_redirect off;
}
Ese mensaje de bucle sugiere que /files/whatever/public/index.html no existe, por lo que try_files en la ubicación / no encuentra $ uri cuando es igual a /index.html
, por lo que try_files siempre redirige internamente esas solicitudes a la ubicación @ que hace la redirección externa.
A menos que tenga una configuración más complicada de la que ha descrito, no creo que deba hacer tanto. No debería necesitar redirecciones externas (o incluso redirecciones internas) o el envío de cookies del lado del servidor para una aplicación js de un solo archivo. La coincidencia de expresión regular para la aplicación y la API tampoco fue del todo correcta.
root /files/whatever/public;
index index.html;
location / {
try_files $uri /index.html =404;
}
# Proxy requests to "/auth" and "/api" to the server.
location ~ ^/(auth|api) {
proxy_pass http://application_upstream;
proxy_redirect off;
}