我们有一个 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.html
或index.htm
在你的根目录中。
如果您仍然指的是查询字符串,您可以写如下内容:
location / {
root /var/www/html/out;
try_files /$arg_file =404;
}
然后请求类似GET www.mysite.com?file=index.html
会搜索根目录中的文件index.html
。Nginx 很棒,不是吗?
希望这可以帮助 :)
另请阅读有关try_files和Nginx 陷阱和常见错误。