0

我正在尝试重写GET //srv/app/static/index.html. 我很接近这几个指令:

root /srv/app/static;
location /static {
    alias /srv/app/static;
}
location = / {
    alias /srv/app/static/index.html;
}

因此,当我GET /staticnginx 提供文件时/srv/app/static/index.html,我很高兴。

但是,当 I 时GET /,nginx 返回 404。检查日志,我看到它正在尝试访问文件/srv/app/static/index.htmlindex.html(原文如此)。为什么它会index.html在给出的路径上添加额外的东西alias

如果我将该指令更改为

location = / {
    index index.html;
    alias /srv/app/static/;
}

错误日志显示它正在尝试访问/srv/app/stati(原文如此,它从 . 中删除了最后一个c字符/srv/app/static。这是怎么回事?

编辑:

我可以像这样得到我想要的行为rewrite

location = / {
    rewrite (.*) /static/index.html;
}

但是,我认为alias它更具性能和惯用性。

4

1 回答 1

0

既然已经设置好root了,就不需要了alias

你可以达到同样的结果

location = / {
    index index.html;
}

至于您的有趣问题,请查看文档中提到The location part of the request is dropped in the request Nginx issues.

基本上,这意味着

location = / {
    alias /srv/app/static/index.html;
}

访问/实际上尝试/srv/app/static/index.html 作为目录访问。我假设 nginx 附加一个 index.html 作为全局的一部分nginx.conf

至于您进入/srv/app/stati错误日志,我也不确定发生了什么。也许您可以粘贴完整的日志条目?

于 2013-10-05T06:41:05.810 回答