在我的应用程序中,我希望位置“/”返回静态 index.html 文件,我希望“/static”从文件夹提供静态文件,我希望所有其他请求返回 404 NOT FOUND。稍后我会将所有其他请求重定向到 WSGI 服务器。
这是目前我的配置:
# Dev server.
server {
listen 1337;
charset UTF-8;
location / {
rewrite ^ static/index_debug.html break;
}
location /static {
alias /home/tomas/projects/streamcore/static;
}
}
静态文件夹工作正常,但“/”返回 404 NOT FOUND。我也试过:
alias /home/tomas/projects/streamcore/static/index_debug.html;
在 location 块中,但返回 500 INTERNAL SERVER ERROR。似乎alias
不喜欢单个文件。另外我试过:
try_files static/index_debug.html;
但这会阻止服务器以错误“try_files 指令中的参数数量无效”开始。显然try_files
实际上需要您尝试多个文件,这不是我要寻找的行为。
所以我的问题是:如何将位置块配置为始终返回静态文件?
编辑:我从其他答案中看到alias
确实应该接受单个文件作为参数,所以我尝试了:
location = / {
alias /home/tomas/projects/streamcore/static/index_debug.html;
}
但我仍然只得到 500 内部服务器错误。“/”请求的错误日志显示:
[警报] 28112#0:*7“/home/tomas/projects/streamcore/static/index_debug.htmlindex.html”不是目录
为什么要尝试打开“index_debug.htmlindex.html”?我没有在index
任何地方使用该指令。
刚刚测试了这个,它对我有用:
该文件
/tmp/root/static/index_debug.html
当然存在:)我可以点击任何 URL,我只得到静态页面。
您可以使用
try_files
和使用一个 HTTP 代码,例如 404,作为第二个参数:请注意前导斜线。
完整的示例如下所示(您不需要重写):
您可以使用 try_files 和重写到指定位置的重定向。像这样:
如果文件存在,
/tmp/root
它将被提供,否则 uri 将被重写static/index_debug.html
并被提供。