Configure nginx para servir el parámetro de cadena de consulta

Configure nginx para servir el parámetro de cadena de consulta

Tenemos un sitio NextJs, con la siguiente exportación obtenemos una carpeta de salida que queremos servir desde Nginx. En salir/iniciar sesión hay un '[[...parámetro]].html. Cuando implementamos el sitio usando pm2, funciona si presionamos la URL "serverIP:port/login/programID/applicant"

Pero cuando se sirve a través de nginx no funciona.

A continuación se muestra el contenido del archivo de configuración de nginx:

servidor{

    listen 7001;
    server_name server_ip;
    root /var/www/html/out/;
   location / {

            try_files $uri $uri.html  $uri.html/ =404;
   }

}

Por favor ayuda. Soy nuevo en nginx y tengo algunas dificultades.

Respuesta1

La cadena de consulta se refiere a los parámetros GET que usted proporciona después de la URL, por ejemplo ?name=foo. Supongo que, en su lugar, desea servir archivos en un directorio, ya que menciona "la carpeta que queremos servir desde Nginx".


En este caso su ejemplo debería funcionar bien, pero suarchivos_de_pruebaLa regla espera que también proporcione el nombre del archivo dentro de la URL.

Entonces, cuando solicites GETwww.misitio.comluego, Nginx intenta encontrar una ruta dentro del rootdirectorio con el nombre /, .htmlo .html/falla con el código de error 404. La ruta .html/se refiere a un directorio nombrado .htmldentro de su raíz y probablemente sea un error.

En caso de que tenga un archivo nombrado index.htmlen su directorio raíz especificado, las siguientes solicitudes coincidirán con él:

  • GET www.mysite.com/index.html(porque $uri)
  • GET www.mysite.com/index (porque $uri.html)

Lo que probablemente estés buscando es esto:

location / {
   root /var/www/html/out;
   index index.html index.htm;
   try_files $uri $uri/ =404;
}

Esto hace lo siguiente:

  • ¿Existe un archivo real, especificado por$uri, en su directorio raíz, luego sirva esto.
  • ¿Existe una ruta de directorio, especificada por$uri, en su directorio raíz?
    • En caso afirmativo, compruebe si contiene un archivo llamadoíndice.htmloíndice.htm- entonces sirve esto.
  • Ninguna de las anteriores, devuelve 404.

Entonces GET www.mysite.comintentaría encontrar un archivo index.htmlo index.htmdentro de su raíz.


En caso de que todavía te refieras a cadenas de consulta, puedes escribir algo como esto:

location / {
    root /var/www/html/out;
    try_files /$arg_file =404;
}

Luego solicite como GET www.mysite.com?file=index.htmlbuscaría un archivo index.htmldentro de su raíz. Nginx es increíble, ¿no?


Espero que esto ayude :)

Lea también más sobrearchivos_de_pruebayErrores y errores comunes de Nginx.

información relacionada