首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django渠道Nginx生产

Django渠道Nginx生产
EN

Stack Overflow用户
提问于 2017-09-12 11:39:59
回答 2查看 13.9K关注 0票数 22

我有一个django项目,最近增加了使用websockets的通道。这似乎一切正常,但我的问题是使生产准备。

我的设置如下:

代码语言:javascript
复制
Nginx web server
Gunicorn for django
SSL enabled

因为我在混音中增加了频道。我花了最后一天努力让它开始工作。

在所有的turtotials上,他们说您在某个端口上运行daphne,然后演示如何为此设置nginx。

但是让金刚角为django服务呢?

所以现在我在8001上运行这个django应用程序

如果我在另一个端口上运行daphne,让我们说8002 --它如何知道它与django项目的相似之处呢?那跑步工人呢?

Gunicorn,Daphne和run Should应该一起跑吗?

EN

回答 2

Stack Overflow用户

发布于 2018-07-27 22:02:59

这个问题实际上在最新的Django频道中得到了解决。

使用公共路径前缀(如/ws/ )来区分WebSocket连接和普通HTTP是很好的做法,因为它将使在特定配置中将通道部署到生产环境更容易。 特别是对于大型站点,可以配置生产级HTTP服务器(如nginx ),以便根据路径将请求路由到(1)用于普通HTTP请求的生产级WSGI服务器(如Gunicorn+Django ),或(2)用于WebSocket请求的产品级ASGI服务器(如Daphne+Channels )。 请注意,对于较小的站点,您可以使用更简单的部署策略,其中Daphne可以服务所有请求-- HTTP和WebSocket --而不是拥有单独的WSGI服务器。在此部署配置中,不需要像is /ws/这样的公共路径前缀。

在实践中,您的NGINX配置看起来类似于(缩短为只包含相关位):

代码语言:javascript
复制
upstream daphne_server {
  server unix:/var/www/html/env/run/daphne.sock fail_timeout=0;
}

upstream gunicorn_server {
  server unix:/var/www/html/env/run/gunicorn.sock fail_timeout=0;
}

server { 
  listen   80; 
  server_name _;

  location /ws/ {
    proxy_pass http://daphne_server;
  }

  location / {
    proxy_pass http://gunicorn_server;
  }
}

(上面假设您将Gunicorn和Daphne服务器绑定到Unix套接字文件。)

票数 26
EN

Stack Overflow用户

发布于 2018-10-25 09:41:29

我已经创建了一个如何混合Django通道和Django Rest框架的示例。我设置了nginx路由:

  • websockets连接将转到daphne服务器
  • HTTP连接(REST )将转到gunicorn服务器。

下面是我的nginx配置文件:

代码语言:javascript
复制
upstream app {
    server wsgiserver:8000;
}

upstream ws_server {
    server asgiserver:9000;
}


server {
    listen 8000 default_server;
    listen [::]:8000;

    client_max_body_size 20M;

    location / {
        try_files $uri @proxy_to_app;
    }

    location /tasks {
        try_files $uri @proxy_to_ws;
    }

    location @proxy_to_ws {
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_redirect off;

        proxy_pass   http://ws_server;
    }

    location @proxy_to_app {
        proxy_set_header X-Forwarded-Proto https;
        proxy_set_header X-Url-Scheme $scheme;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;

        proxy_pass   http://app;
    }

}
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46175452

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档