NGINX:从不同位置提供静态文件

时间:2014-01-08 16:05:22

标签: django apache file nginx static

我在两台不同的机器上实现了2台服务器(不同的IP地址)。让我们称他们为 serverA serverB

serverA serverB 将为某些静态文件提供的地方。

serverA 配置文件是:

limit_req_zone $binary_remote_addr zone=lmz_serverA:10m rate=5r/s;

server {
    listen   80; ## listen for ipv4; this line is default and implied

    server_name serverA;

    location /server_a {
    limit_req zone=lmz_serverA burst=5 nodelay;
    rewrite /server_a/(.*) /$1 break;
    proxy_intercept_errors     on;
    proxy_pass http://0.0.0.0:8080;
    proxy_redirect off;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }


    location /static/BIG/ {
    root /safe/server_a/;
    autoindex off;
    expires 7d;
    }

    location /server_a/static/{
    root /safe/;
    autoindex off;
    expires 7d;
    }

    location = /favicon.ico{
    alias /safe/server_a/static/images/favicon.ico;
    }
}

serverB 配置文件是:

limit_req_zone $binary_remote_addr zone=lmz_serverB:10m rate=5r/s;

server {
    listen   80; ## listen for ipv4; this line is default and implied

    server_name serverB;

    location /server_b {
    limit_req zone=lmz_serverB burst=5 nodelay;
    rewrite /server_b/(.*) /$1 break;
    proxy_intercept_errors     on;
    proxy_pass http://1.0.0.0:8080;
    proxy_redirect off;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    location /server_b/static/ {
    root /safe/;
    autoindex off;
    expires 7d;
    }

---结束

现在,假设这些服务器位于不同的大陆......一些静态文件 OK 可以从 serverA 提供,但是BIG(/ static / BIG /)的东西给我带来一些麻烦,因为大多数用户都在 serverB 的同一大洲。所以我想从 serverA 中删除那些BIG静态文件并将它们放在 serverB 上,以便更轻松地下载它们。

有没有人知道如何通过在 serverB 上提供这些文件并更改nginx配置文件来实现这一目标?

重要 serverA 实现名为 appA 的Django应用程序, serverB 实现不同的(但仍然是Django) )名为 appB 的应用程序。我无法更改这两个应用的代码。

提前致谢!

2 个答案:

答案 0 :(得分:0)

您可以从服务器进行302 Moved Temporarily重定向,该服务器需要另一个重定向服务大文件。

server_name serverA;
location /static/BIG/ {
    return  302 $scheme://serverB$uri;
}

答案 1 :(得分:0)

我在搜索类似的内容时偶然发现了这一点 - 如何提供不同的文件名而不是“> 。我的最终解决方案:

location /robots.txt {
       # Try the beta file, which has a disallow everything
       root /location/to/static/files;
       try_files /robots-beta.txt =404;
}