Configure o nginx para servir o parâmetro de string de consulta

Configure o nginx para servir o parâmetro de string de consulta

Temos um site NextJs, na próxima exportação obtemos uma pasta de saída que queremos servir no Nginx. Em out/login existe um '[[...parâmetro]].html'. Quando implantamos o site usando pm2, ele estará funcionando se clicarmos no url "serverIP:port/login/programID/applicant"

Mas ao servir através do nginx não está funcionando.

Abaixo está o conteúdo do arquivo de configuração nginx:

servidor{

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

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

}

Por favor ajude. Eu sou novo no nginx, então estou tendo algumas dificuldades.

Responder1

A string de consulta refere-se aos parâmetros GET que você fornece após o URL, por exemplo ?name=foo. Meu palpite é que você deseja servir arquivos em um diretório, já que mencionou "a pasta externa que queremos servir no Nginx".


Neste caso, seu exemplo deve funcionar bem, mas seutry_filesA regra espera que você também forneça o nome do arquivo dentro da URL.

Então, quando você estiver solicitando GETwww.meusite.comentão o Nginx tenta encontrar um caminho dentro do rootdiretório com nome /, .htmlou .html/falha com o código de erro 404. Path .html/refere-se a um diretório nomeado .htmldentro de sua raiz e provavelmente é um erro.

Caso você tenha um arquivo nomeado index.htmlno diretório raiz especificado, as seguintes solicitações corresponderão a ele:

  • GET www.mysite.com/index.html(por causa de $uri)
  • GET www.mysite.com/index (por causa de $uri.html)

O que você provavelmente está procurando é isto:

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

Isso faz o seguinte:

  • Existe um arquivo real, especificado por$uri, em seu diretório raiz - então sirva isso.
  • Existe um caminho de diretório, especificado por$uri, em seu diretório raiz?
    • Se sim, verifique se contém um arquivo chamadoindex.htmlouíndice.htm- então sirva isto.
  • Nenhuma das opções acima, retorne 404.

Então, GET www.mysite.comtentaria encontrar um arquivo index.htmlou index.htmdentro de sua raiz.


Caso você ainda se refira a strings de consulta, você pode escrever algo assim:

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

Em seguida, solicite como GET www.mysite.com?file=index.htmlse procurasse um arquivo index.htmldentro de sua raiz. Nginx é incrível, não é?


Espero que isto ajude :)

Leia também mais sobretry_fileseArmadilhas e erros comuns do Nginx.

informação relacionada