Nginx conf为两个gunicorn应用程序(django和tilestache)

时间:2012-07-17 05:07:00

标签: django nginx gis gunicorn

我正在尝试托管一个由django应用程序和由tilestache提供服务的地图图块组成的网站。我可以使用

让它们分别运行和提供内容
gunicorn_django -b 0.0.0.0:8000 

用于django app,或

gunicorn "TileStache:WSGITileServer('tilestache.cfg')"

用于tilestache。我已经尝试了daemonizing django应用程序并在另一个端口(8080)上使用tilestache进程同时运行它们,但是tilestache不起作用。我认为问题在于我的nginx conf:

server {
    listen   80;
    server_name localhost;

    access_log /opt/django/logs/nginx/vc_access.log;
    error_log  /opt/django/logs/nginx/vc_error.log;

    # no security problem here, since / is alway passed to upstream
    root /opt/django/;
    # serve directly - analogous for static/staticfiles
    location /media/ {
        # if asset versioning is used
        if ($query_string) {
            expires max;
        }
    }
    location /static/ {
        # if asset versioning is used
        if ($query_string) {
            expires max;
        }
    }
    location / {
        proxy_pass_header Server;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Scheme $scheme;
        proxy_connect_timeout 10;
        proxy_read_timeout 10;
        proxy_pass http://localhost:8000/;
    }
    # what to serve if upstream is not available or crashes
    error_page 500 502 503 504 /media/50x.html;
}

我可以在conf server中添加另一个proxy_pass http://localhost:8080/块吗?另外,我对这个堆栈很新(我非常依赖Adrián Deccico的教程here来启动和运行django部分)所以任何“哇哇这是一个明显的错误”或建议我将不胜感激。

1 个答案:

答案 0 :(得分:8)

据我所知 - 您已将location /映射到localhost:8000。如果有2个不同的上游,则需要两个不同的位置映射,每个上游一个映射。 因此,假设django应用程序是您域中的主要站点,您将拥有现在的默认位置:

location / {
    proxy_pass_header Server;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Scheme $scheme;
    proxy_connect_timeout 10;
    proxy_read_timeout 10;
    proxy_pass http://localhost:8000/;
}

但随后为其他应用添加了另一个位置:

location /tilestache {
    proxy_pass_header Server;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Scheme $scheme;
    proxy_connect_timeout 10;
    proxy_read_timeout 10;
    proxy_pass http://localhost:8080/;
}

这里唯一的区别是港口。这样,域{/ 1}}将处理domain.com/tilestache,而所有其他地址将默认为localhost:8080的django应用。 将localhost:8000放在location /tilstache之前。

为清楚起见,您可以像这样定义上游:

location /

然后在upstream django_backend { server localhost:8000; } upstream tilestache_backend { server localhost:8080; } 部分中,使用:

location