Nginx conf两个gunicorn应用程序(Django和Tilestache)

我正在尝试托pipe由django应用程序和tilestache提供的地图图块组成的网站。 我可以让他们运行和分别服务的内容使用

gunicorn_django -b 0.0.0.0:8000 

为Django的应用程序,或

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

为tilestache。 我已经尝试守护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块for proxy_pass http://localhost:8080/ ? 此外,我对这个堆栈还是很陌生的(我非常依赖AdriánDeccico的教程来使django部分运行),所以任何“哇,这是一个明显的错误”或build议将不胜感激。

据我所见 – 你已经映射location /localhost:8000 。 当你有两个不同的上游时,你需要两个不同的位置映射,每个上游一个。 因此,假设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进行处理,而所有其他地址将默认为localhost:8000的django应用程序。 在location /tilstache之前放置location /tilstache

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

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