他们似乎遇到了类似的问题,但该解决方案对我不起作用。
基本上,每当我尝试启动uWSGI进程时,我总是遇到Nginx 502错误的网关屏幕。按照文档中的说明,我有两个独立的uwsgi进程正在运行。
当我运行websocket uwsgi实例时,得到以下信息:
*** running gevent loop engine [addr:0x487690] *** [2015-05-27 00:45:34,119 wsgi_server] DEBUG: Subscribed to channels: subscribe-broadcast, publish-broadcast
这告诉我uwsgi实例运行正常。然后我运行我的下一个uwsgi进程,并且那里也没有错误日志…
当我导航到浏览器中的页面时,带有hang的页面会挂起几秒钟,然后显示502 Bad Gateway屏幕。
根据NGINX日志,NGINX表示:
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"
这是我尝试在Web浏览器中访问页面时获得的唯一错误日志。
任何想法有人吗???
以下是我的一些配置文件:
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; }
我有以下django.conf文件,该文件扩展了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; } }
负责我的uwsgi进程的两个文件如下:
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
和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
我发现了问题。
我的[runserver]套接字(app.sock)应该指向下面upstream django,我的[wsserver]套接字(django.sock)应该指向下面location /ws/:
upstream django
location /ws/
upstream django { server unix:/opt/django/app.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/django.sock; proxy_buffers 8 32k; proxy_buffer_size 64k; } }