nginx 静态文件服务问题

nginx 静态文件服务问题

好吧,我想尝试一下 nginx,但在通过 FastCGI 设置我的 Django 应用程序时,我遇到了一个问题。FastCGI 运行正常,但静态文件给我 404。这是我的配置:

server {
 listen   80;
 server_name  localhost;
 access_log  /var/log/nginx/default.access.log;


 location /static/public {
  autoindex on;
  index index.html;
  root /home/daniels/djangoapp/public;
 } 

 location / {
  include /etc/nginx/fastcgi_params;
  fastcgi_pass unix:/home/daniels/djangoapp/djangoapp.sock;
 }

 # redirect server error pages to the static page /50x.html
 #
 #error_page   500 502 503 504  /50x.html;
 #location = /50x.html {
 # root   /var/www/nginx-default;
 #}
}

我尝试访问的任何内容http://127.0.0.1/静态/公共/给出 404
例如:http://127.0.0.1/static/public/css/sytle.css位于 /home/daniels/djangoapp/public/css/style.css 的页面显示 404

知道什么地方出了问题吗?

法律:

2010/02/20 22:31:42 [error] 3411#0: *3 open() "/home/daniels/djangoapp/public/img/static/public/img/background.jpg" failed (2: No such file or directory), client: 10.0.2.2, server: localhost, request: "GET /static/public/img/background.jpg HTTP/1.1", host: "127.0.0.1"

因此,它似乎将/static/public位置指令的部分附加到了根目录

LE2:
好吧,我真的很抱歉打错了,但这是我复制粘贴日志并编辑应用程序名称时出现的。似乎发生的情况是,因为我/static/public将根设置为/home/daniels/djangoapp/public,所以http://127.0.0.1/static/public/test.jpg我原本希望 nginx 查找文件,/home/daniels/djangoapp/public/test.jpg但它却在查找它。/home/daniels/djangoapp/public/static/public/test.jpg
似乎它/static/public在路径上附加了一个额外内容。

答案1

只需使用此方法修复:

location /static/public/ {
    alias /home/daniels/neasoferul/public/;
}

答案2

我认为 Nginx 以相反的顺序关联规则:尝试将 /static/public 部分放在 / 规则下方。

我有这个配置,它工作正常:

# proxy to Apache 2 and mod_python
location / {
    proxy_set_header    Host             $host;
    proxy_set_header    X-Real-IP        $remote_addr;
    proxy_set_header    X-Forwarded-For  $proxy_add_x_forwarded_for;

    proxy_pass http://wsgi;
}
# catch any weird erroneous media locations - it's a sub domain
location /media/ {
    root   /var/www/sites/mysite/static;
}

答案3

假设您实际上并没有在 URL 中输入 sytle.css 而是 style.css,那么启用错误日志:http://wiki.nginx.org/NginxHttpMainModule#error_log并查看它尝试访问哪条路径。

答案4

您应该将静态内容放在其自己的子域中。这样以后管理和扩展会更方便。

相关内容