es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Nginx no puede utilizar la segunda ubicación.

Estoy tratando de servir dos archivos HTML estáticos planos, pero mi configuración de ubicación siempre resuelve en uno solo.
Cuando accedo a myurl.com/a/b siempre se muestra a.html.

Lo primero que intenté fue anidar la ubicación /a/b de acuerdo a esta respuesta,

location /a/ {
 location /a/b {
  try_files /b.html
 }
 try_files /a.html
}

pero siempre obtengo a.html.

Luego agregué “^~” de acuerdo a esta pregunta sobre prioridad de ubicación pensando que /a/b sería el primer resultado, pero no funciona.

location ^~ /a/b {
  try_files /b.html;
}
location /a/ {
  try_files /a.html;
}

En los comentarios había un enlace a https://nginx.viraptor.info/, y si copio el intento “^~” allí, el resultado es:

Coincidencia final:
Ubicación: /a/b
Tipo de coincidencia: prefijo de prioridad

También intenté ambas opciones con y sin “$uri” y “$uri/”, por ejemplo:

try_files $uri $uri/ XX.html

Algunas líneas relevantes de mi archivo de registro de Nginx son:

[debug] 1222#1222: *10775 http uri: "/a/b/"
...
[debug] 1222#1222: *10775 probando ubicación: "/"
[debug] 1222#1222: *10775 probando ubicación: "a/"
[debug] 1222#1222: *10775 probando ubicación: ~ "/.ht"
[debug] 1222#1222: *10775 utilizando configuración "/a/"
...
[debug] 1222#1222: *10775 intentando usar archivo: "/a.html" "/var/www/html/a.html"
[debug] 1222#1222: *10775 intentando archivo uri: "/a.html"

Luego intenté usar una coincidencia exacta de acuerdo a esta pregunta, pero aún obtengo a.html.

location = /a/b/ {
  try_files /b.html =404;
}
location /a/ {
  try_files /a.html =404;
}

¿Qué estoy haciendo mal con mi configuración?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Basándonos en la información proporcionada, parece que el problema puede radicar en el orden de los bloques de ubicación. El orden en el que se definen los bloques de ubicación en el archivo de configuración nginx determina el orden en que se evalúan. En su configuración actual, el bloque de ubicación para /a/ está definido antes del bloque de ubicación para /a/b, por lo que siempre se encuentra primero y sirve a.html.

    Para solucionar esto, debes intentar invertir el orden de los bloques de ubicación de esta manera:

    location /a/ {
      try_files /a.html;
    }
    location /a/b/ {
      try_files /b.html;
    }
    

    Esto asegurará que el bloque /a/b se encuentre primero cuando la URL sea /a/b, y solo si no coincide, se evaluará el bloque /a/.

    Además, asegúrate de que los nombres de archivo en tus directivas try_files sean correctos y que los archivos existan en la ubicación correcta en tu servidor. Puedes verificar esto intentando acceder directamente a cada archivo utilizando su URL completa (por ejemplo, myurl.com/a.html) y verificando que devuelva el contenido esperado.

    Otra cosa a verificar es si hay algún otro bloque de ubicación o regla de reescritura en tu archivo de configuración que pueda interferir con estos en particular. Asegúrate de no definir coincidencias de expresiones regulares conflictivas ni utilizar ninguna otra directiva que pueda anular el comportamiento de la directiva try_files.

    Por último, verifica el registro de errores de nginx para ver si hay algún mensaje de error relevante que pueda arrojar algo de luz sobre el problema. Las líneas de depuración que has incluido son útiles, pero puede haber otros mensajes que proporcionen más detalles o contexto.

Comments are closed.