2017-03-21 91 views
0

我遇到的問題是在nginx服務器後面的皇帝模式(主應用+ websocket)中運行2個vassals。一切似乎都運行良好,但所有websocket請求都返回錯誤502錯誤的網關。 websocket應用程序正在運行django-websocket-redis。任何想法,我出錯了?如何在皇帝模式下配置帶有多個uwsgi vassals(帶websockets)的nginx?

從暴發戶

exec /usr/local/bin/uwsgi --emperor /etc/uwsgi/vassals/ --logto /var/log/uwsgi.log 

運行具有/etc/uwsgi/vassals/dashdb_websocket.ini

# dashdb_websocket.ini file 

[uwsgi] 
umask = 002 
home = /opt/dashdb/venv/dashdb-3.5 
plugin = python35 
chdir = /opt/dashdb 
master = true 
no-orphans = true 
die-on-term = true 
memory-report = true 
env = DJANGO_SETTINGS_MODULE=dashdb.settings.opener 
socket = /var/run/uwsgi/dashdb_ws.sock 
pythonpath = /opt/dashdb 
module = dashdb.wsgi_websocket 
threads = 1 
processes = 1 
http-websockets = true 
gevent = 1000 
# Log file location 
daemonize = /var/log/uwsgi/dashdb_websocket.log 

隨着/etc/uwsgi/vassals/dashdb.ini

# dashdb.ini file 

[uwsgi] 

# Django-related settings 
# the base directory (full path) 
chdir   = /opt/%n 
# Django's wsgi file 
module   = dashdb.wsgi 
# the virtualenv (full path) 
home   = /opt/dashdb/venv/%n-3.5 
plugin   = python35 
# settings location 
env    = DJANGO_SETTINGS_MODULE=dashdb.settings.opener 


# Process-related settings 
# master 
master   = true 
# maximum number of worker processes 
processes  = 3 
# the socket (use the full path to be safe) 
socket   = /var/run/uwsgi/%n.sock 
# ... with appropriate permissions - may be needed 
chmod-socket = 666 
# clear environment on exit 
vacuum   = true 
# Log file location 
daemonize  = /var/log/uwsgi/%n.log 

和nginx的配置:

upstream django_dashdb { 
    server unix:/var/run/uwsgi/dashdb.sock; 
} 


server { 
    listen *:80; 
    server_name MY_DOMAIN; 
    server_tokens off; 
    root /opt/dashdb; 
    charset utf-8; 

    # Increase this if you want to upload large attachments 
    # Or if you want to accept large git objects over http 
    client_max_body_size 250m; 


    # Individual nginx logs for this GitLab vhost 
    access_log /var/log/dashdb/dashdb_access.log; 
    error_log /var/log/dashdb/dashdb_error.log; 

    # Django media 
    location /media { 
     alias /opt/dashdb/media; 
    } 

    # Django static 
    location /static { 
     alias /opt/dashdb/static; 
    } 

    location/{ 
     uwsgi_read_timeout 180; 
     uwsgi_pass django_dashdb; 
     include  /opt/dashdb/uwsgi_params; 
    } 

     location /ws/ { 
      proxy_http_version 1.1; 
      proxy_set_header Upgrade $http_upgrade; 
      proxy_set_header Connection "upgrade"; 
      proxy_pass http://unix:/var/run/uwsgi/dashdb_ws.sock; 
    } 

    error_page 502 /502.html; 
} 

中的錯誤日誌:

2017/03/20 23:27:51 [error] 3586#3586: *2759 upstream prematurely closed connection while reading response header from upstream, client: 
10.31.32.22, server: MY_DOMAIN...com, request: "GET /ws/builds?subscribe-broadcast&echo HTTP/1.1", upstream: "http://unix:/var/run/uwsgi/dashdb_ws.sock:/ws/builds?subscribe-broadcast&echo", host: "MY_DOMAIN...com" 

回答

0

我需要設置

http-socket = /var/run/uwsgi/dashdb_ws.sock 

,而不是

socket = /var/run/uwsgi/dashdb_ws.sock 

在WebSocket的uwsgi配置INI