Ho battuto la testa su questo problema da giorni e finalmente ho raggiunto un muro di mattoni.nginx uwsgi websockets 502 Bad Gateway upstream connessione prematuramente chiusa durante la lettura dell'intestazione di risposta da upstream
Ho cercato di ottenere il mio stack per eseguire:
Sono stato a guardare alcuni articoli altri SO come questo:
nginx - uWSGI HTTP + websocket config
Sembrano per avere un problema simile sto incontrando ma la soluzione non funziona per me.
Fondamentalmente, continuo a incontrare la schermata del gateway di nginx 502 ogni volta che provo ad avviare i miei processi uWSGI. Ho due processi uwsgi separati in esecuzione, come da istruzioni nella documentazione.
Quando eseguo il websocket uwsgi esempio, ricevo il seguente:
*** running gevent loop engine [addr:0x487690] ***
[2015-05-27 00:45:34,119 wsgi_server] DEBUG: Subscribed to channels: subscribe-broadcast, publish-broadcast
che mi dice che tale istanza uwsgi è in esecuzione bene. Quindi eseguo il mio prossimo processo uwsgi e nessun registro degli errori ...
Quando si naviga nella pagina del browser, la pagina si blocca per alcuni secondi, prima di ottenere la schermata 502 Bad Gateway.
Secondo i registri Nginx, Nginx dice:
2015/05/26 22:46:08 [error] 18044#0: *3855 upstream prematurely closed connection while reading response header from upstream, client: 192.168.59.3, server: , request: "GET /chat/ HTTP/1.1", upstream: "uwsgi://unix:/opt/django/django.sock:", host: "192.168.59.103:32768"
questo è l'unico log degli errori ottengo quando si tenta di accedere alla pagina nel browser web.
Qualche idea qualcuno ???
Qui di seguito sono alcuni dei miei file di configurazione:
nginx.conf
user www-data;
worker_processes 4;
pid /run/nginx.pid;
events {
worker_connections 768;
}
http {
##
# Basic Settings
##
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
# server_tokens off;
# server_names_hash_bucket_size 64;
# server_name_in_redirect off;
include /etc/nginx/mime.types;
default_type application/octet-stream;
##
# SSL Settings
##
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
ssl_prefer_server_ciphers on;
##
# Logging Settings
##
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
##
# Gzip Settings
##
gzip on;
gzip_disable "msie6";
# gzip_vary on;
# gzip_proxied any;
# gzip_comp_level 6;
# gzip_buffers 16 8k;
# gzip_http_version 1.1;
# gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
##
# Virtual Host Configs
##
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/django.conf;
}
Ho il seguente file django.conf, che si estende nginx.conf
upstream django {
server unix:/opt/django/django.sock;
}
server {
listen 80 default_server;
charset utf-8;
client_max_body_size 20M;
sendfile on;
keepalive_timeout 0;
large_client_header_buffers 8 32k;
location /media {
alias /opt/django/app/media/media;
}
location /static {
alias /opt/django/app/static;
}
location/{
include /opt/django/uwsgi_params;
}
location /ws/ {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_pass http://unix:/opt/django/app.sock;
proxy_buffers 8 32k;
proxy_buffer_size 64k;
}
}
E due file che sono responsabili per i miei processi uwsgi come segue:
runserver_uwsgi.ini:
[uwsgi]
ini = :runserver
[default]
userhome = /opt/django
chdir = %dapp/
master = true
module = chatserver.wsgi:application
no-orphans = true
threads = 1
env = DJANGO_SETTINGS_MODULE=myapp.settings
vacuum = true
[runserver]
ini = :default
socket = /opt/django/app.sock
module = wsgi_django
buffer-size = 32768
processes = 4
chmod-socket=666
e wsserver_uwsgi.ini
[uwsgi]
ini = :wsserver
[default]
userhome = /opt/django
chdir = %dapp/
master = true
module = chatserver.wsgi:application
no-orphans = true
threads = 1
env = DJANGO_SETTINGS_MODULE=chatserver.settings
vacuum = true
[wsserver]
ini = :default
http-socket = /opt/django/django.sock
module = wsgi_websocket
http-websockets = true
processes = 2
gevent = 1000
chmod-socket=666
Ah, quindi ci deve essere un'ulteriore configurazione su apache2/nginx? Come sulla macchina di sviluppo locale funziona perfettamente senza problemi, ma sulla produzione ottengo lo stesso errore a monte di te. Sto usando Apache, quindi non sono sicuro se c'è un modo simile per risolverlo. – kiradotee
L'ho solo configurato tramite NGINX. Questa configurazione presuppone che il server web e django siano in esecuzione sullo stesso host, se questo è utile. – Dominooch