让Nginx在Django本地服务器前提供静态内容

时间:2013-04-22 18:43:39

标签: django nginx

我正在尝试在Django的localhost网络服务器(127.0.0.1:8000)前面使用Nginx来提供静态内容。我希望Nginx能够在'/ static'下提供所有文件,如果没有,请将请求传递给Django的网络服务器,但我被卡住了!这就是我所做的:

  1. 在我的OSX上运行Nginx,所以'欢迎来到Nginx!'页面显示在localhost上。
  2. 更改了我的/ etc / hosts文件以添加'testdev.com':

    127.0.0.1 localhost

    127.0.0.1 testdev.com

  3. /usr/local/src/nginx-1.2.6

    中的Made / sites-available和/ sites-enabled文件
  4. / conf中的我的nginx.conf文件是默认加上include语句:

    包括/usr/local/src/nginx.1.2.6/sites-enabled/testdev.com

  5. 5.我的testdev.com文件位于网站中,并且/ sites-enabled中的符号链接。

    server {
    root /<path-to-my-django-project>/website/static;
    server_name testdev.com;
    gzip            off;
    listen         8000;
    
    location = /favicon.ico  {
    rewrite "/favicon.ico" /img/favicon.ico;
    }
    proxy_set_header Host $host;
    location / {
    if (-f $request_filename) {
         add_header X-Static hit;
         access_log   off;
     }
    
     if (!-f $request_filename) {
         proxy_pass http://127.0.0.1:8000;
         add_header X-Static miss;
     }
     }
    }
    

    如果我卷曲testdev.com,它会显示Nginx:

    curl -I http://testdev.com
    HTTP/1.1 200 OK
    Server: nginx/1.2.6
    Date: Mon, 22 Apr 2013 18:37:30 GMT
    Content-Type: text/html
    Content-Length: 612
    Last-Modified: Sun, 21 Apr 2013 19:39:47 GMT
    Connection: keep-alive
    Accept-Ranges: bytes
    

    但如果我尝试访问静态文件,则不执行任何操作:

    curl -I http://testdev.com/static/css/style.css
    HTTP/1.1 404 Not Found
    Server: nginx/1.2.6
    Date: Mon, 22 Apr 2013 18:38:53 GMT
    Content-Type: text/html
    Content-Length: 168
    Connection: keep-alive
    

    所有这些都来自Google搜索,并找到this

    我在

    中添加了
    listen 8000
    
    在我的testdev.com conf文件中的

    声明,因为我认为Nginx虚拟主机需要它,但我非常困惑。博客作者使用

    127.0.1.1 testdev.com
    

    在他的hosts文件中,但是如果我添加它,第一个curl语句就会挂起。

    我做错了什么?

1 个答案:

答案 0 :(得分:2)

谢谢大家 - 我已经开始工作了,这是我的工作testdev conf:

server {
    root /<path-to-django-site>;
    server_name testdev.com;
    gzip            off;
    autoindex       on;

    proxy_set_header Host $host;

    location /static/ {
        add_header X-Static hit;
    }

    location / {
        proxy_pass       http://127.0.0.1:8000;

    }
}

如果您不提供服务器根路径,则看起来该位置块采用服务器根路径。现在当我卷曲时:

curl -I  http://testdev.com/static/js/utils.js
HTTP/1.1 200 OK
Server: nginx/1.2.6
Date: Tue, 23 Apr 2013 01:36:07 GMT
Content-Type: application/x-javascript
Content-Length: 2730
Last-Modified: Thu, 13 Dec 2012 18:54:10 GMT
Connection: keep-alive
X-Static: hit
Accept-Ranges: bytes

非常感谢@Evgeny - 让我走上正确的路线。 Miget对于那些希望做同样事情的人来说很有用。