django+uwsgi+nginx: websock 报502/400

Posted 寻坑者

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了django+uwsgi+nginx: websock 报502/400相关的知识,希望对你有一定的参考价值。

耽搁了近2个月,终于解决了,主要是nginx/uwsgi/django相关的配置:

一、django工程settings.py,添加 

WEBSOCKET_FACTORY_CLASS = "dwebsocket.backends.uwsgi.factory.uWsgiWebSocketFactory"

参考:https://www.cnblogs.com/Xjng/p/4853080.html

 

二、nginx配置

location / {
    include uwsgi_params;
    uwsgi_pass 127.0.0.1:8088;
    uwsgi_send_timeout 600;        # 指定向uWSGI传送请求的超时时间,完成握手后向uWSGI传送请求的超时时间。
    uwsgi_connect_timeout 600;   # 指定连接到后端uWSGI的超时时间。
    uwsgi_read_timeout 600;
    ##### 支持websocket
    proxy_redirect off;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;
}

 

三、uwsgi.ini 

[uwsgi]
# 配置服务器的监听ip和端口,让uWSGI作为nginx的支持服务器的话,设置socke就行;如果要让uWSGI作为单独的web-server,用http
#http = 127.0.0.1:8088
socket = 127.0.0.1:8088
# 配置项目目录(此处设置为项目的根目录)
chdir = /srv/qa-platform/back-server
# 配置入口模块 (django的入口函数的模块,即setting同级目录下的wsgi.py)
wsgi-file = back-server/wsgi.py
# 开启master, 将会多开一个管理进程, 管理其他服务进程
master = True
# 服务器开启的进程数量
processes = 2
# 以守护进程方式提供服, 输出信息将会打印到log中
daemonize = /srv/qa-platform/back-server/logs/wsgi.log
# 日志切割,需要启动的时候加上 --log-reopen
touch-logreopen = /srv/qa-platform/back-server/logs/touchfile
# 服务器进程开启的线程数量 
threads = 4
# 退出的时候清空环境变量
vacuum = true
# 进程pid
pidfile = uwsgi.pid

 

四、启动:uwsgi --ini uwsgi.ini --http-websockets  --log-reopen

 

=============2020/08/17 补充==========

问题:后端无法获取前端send的数据

根源:uwsgi配置不正确,修正如下

#threads = 4
async=30
#异步数
ugreen=\'\'
#这个必须,否则无法拿到前端传过来的数据

 

以上是关于django+uwsgi+nginx: websock 报502/400的主要内容,如果未能解决你的问题,请参考以下文章

通过 Nginx 的 uwsgi + django - uwsgi 设置/生成?

转载nginx+uwsgi+django

Django+Nginx+uWSGI = 504 网关超时

uWSGI + Nginx + Django 部署

Django + Uwsgi + Nginx 实现生产环境部署

Django + Uwsgi + Nginx 实现生产环境部署