无法在nginx + bootstrap上引用静态文件

时间:2014-11-04 03:46:56

标签: twitter-bootstrap nginx flask

我的nginx conf文件的静态文件位置设置为:

# Settings to by-pass for static files
location ^~ /static/  {
    # Example:
    # root /full/path/to/application/static/file/dir;
    root /opt/flaskapp/static/;
}

我的模板文件包含:

<link href="/static/bootstrap.min.css" rel="stylesheet" media="screen">
<link href="/static/bootstrap-responsive.css" rel="stylesheet">
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script src="/static/bootstrap.min.js"></script>
<meta name="viewport" content="width=device-width, initial-scale=1.0">

但是,当我运行我的烧瓶app时 - bootstrap没有加载任何js :(

我尝试了多种位置组合,甚至尝试在我的nginx con文件中使用它:

location /bootstrap.min.js { 
    alias /opt/flaskapp/static/bootstrap.min.js; 
}

我可以通过127.0.0.1/bootstrap.min.js访问js文件。

我确定我错过了一些愚蠢的东西。

谢谢!

1 个答案:

答案 0 :(得分:1)

这是因为您认为nginx在查看/opt/flaskapp/static/<file>时会在文件系统中查找/opt/flaskapp/static/static/<file>,因为URI始终附加到本地路径(root),直到您要么:

  • 使用rewrite更改URI。
  • 使用alias指令将位置前缀或正则表达式映射到物理路径。

因此,在您的情况下,您需要后者,正确的配置是:

location ^~ /static/ {
    alias /opt/flaskapp/static/;
}

在您的特定情况下,由于URI前缀与目录名称相同,您只需将本地root更改为父目录(root /opt/flaskapp)。