4

djangoアプリとtilestacheが提供するマップタイルで構成されるサイトをホストしようとしています。どちらかを使用して、コンテンツを個別に実行および提供することができます

gunicorn_django -b 0.0.0.0:8000 

djangoアプリの場合、または

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

tilestacheのために。djangoアプリをデーモン化して、別のポート()でtilestacheプロセスと同時に実行しようとしました8080が、tilestacheが機能しません。問題は私のnginxconfにあると思います:

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;
}

serverconfに別のブロックを追加できますproxy_pass http://localhost:8080/か?さらに、私はこのスタックに非常に慣れていないので(ここでは、 AdriánDeccicoのチュートリアルに大きく依存して、djangoの部分を稼働させています)、「明らかな間違いです」または提案をいただければ幸いです。

4

1 に答える 1

8

私が見る限り、あなたはlocation /に行くようにマップしましたlocalhost:8000。2つの異なるアップストリームがある場合、アップストリームごとに1つずつ、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/;
}

ここでの唯一の違いはポートです。このように、domain.com / tilestacheはによって処理されますがlocalhost:8080、他のすべてのアドレスはデフォルトで。のdjangoアプリになりlocalhost:8000ます。location /tilstache前に配置しlocation /ます。

明確にするために、次のようにアップストリームを定義できます。

upstream django_backend  {
  server localhost:8000;
}

upstream tilestache_backend  {
  server localhost:8080;
}

次に、locationセクションで次を使用します。

location / {
    .....
    proxy_pass  http://django_backend;
}

location /tilestache {
    .....
    proxy_pass  http://tilestache_backend;
}
于 2012-07-17T08:04:01.207 に答える