配置 nginx 以提供查询字符串参数

配置 nginx 以提供查询字符串参数

我们有一个 NextJs 网站,通过下一个导出,我们得到一个我们希望从 Nginx 提供的 out 文件夹。在 out/login 中有一个 '[[...parameter]].html'。当我们使用 pm2 部署网站时,如果我们点击 url“serverIP:port/login/programID/applicant”,它就会正常工作

但是通过 nginx 提供服务时它不起作用。

以下是nginx配置文件内容:

服务器{

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

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

}

请帮忙。我是 nginx 新手,所以遇到了一些困难。

答案1

查询字符串是指在 URL 后提供的 GET 参数,例如?name=foo。我的猜测是,您想在目录中提供文件,因为您提到了“我们想从 Nginx 提供的文件夹”。


在这种情况下,您的示例应该可以正常工作,但是您的try_files规则要求您还在 URL 中提供文件名。

因此,当你请求 GETwww.mysite.comroot然后 Nginx 会尝试在目录中查找名为 的路径/.html或者.html/失败并返回 404 错误代码。路径.html/指的是根目录中的目录.html,这可能是一个错误。

如果你index.html在指定的根目录中有一个名为的文件,那么以下请求将匹配它:

  • GET www.mysite.com/index.html(因为$uri
  • GET www.mysite.com/index (因为$uri.html

你可能正在寻找的是这个:

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

这将执行以下操作:

  • 是否有一个实际的文件,由$uri,在你的根目录中 - 然后提供它。
  • 是否存在目录路径,由以下指定:$uri,在你的根目录中?
    • 如果是,检查它是否包含名为索引.html或者主页- 然后上菜。
  • 以上都不是,返回 404。

因此GET www.mysite.com会尝试找到一个文件index.htmlindex.htm在你的根目录中。


如果您仍然指的是查询字符串,您可以写如下内容:

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

然后请求类似GET www.mysite.com?file=index.html会搜索根目录中的文件index.html。Nginx 很棒,不是吗?


希望这可以帮助 :)

另请阅读有关try_filesNginx 陷阱和常见错误

相关内容