• Empleos
  • Sobre nosotros
  • profesionales
    • Inicio
    • Empleos
    • Cursos y retos
  • empresas
    • Inicio
    • Publicar vacante
    • Nuestro proceso
    • Precios
    • Evaluaciones
    • Nómina
    • Blog
    • Comercial
    • Calculadora de salario

0

520
Vistas
Implementación de canales de Django con Daphne + NGINX usando SSL

Tenía una configuración de trabajo de proxy nginx a un servidor daphne ascendente para canales django. Sin embargo, cuando moví mi sitio a ssl, comencé a encontrar problemas con errores 403 con las solicitudes de websocket. Esto es de mi registro de errores:

 None - - [24/Apr/2017:02:43:36] "WSCONNECTING /pulse_events" - - None - - [24/Apr/2017:02:43:36] "WSREJECT /pulse_events" - - 2017/04/24 02:43:37 [info] 465#465: *10 client 69.203.115.135 closed keepalive connection

Y desde el registro de acceso:

 - - [24/Apr/2017:02:48:54 +0000] "GET /pulse_events HTTP/1.1" 403 5 "-" "-" - - [24/Apr/2017:02:49:03 +0000] "GET /pulse_state/ HTTP/2.0" 200 1376 "-" "Pulse/1 CFNetwork/811.4.18 Darwin/16.1.0"

Mi configuración de nginx es la siguiente:

 upstream pulse_web_server { server unix:/home/pulseweb/run/gunicorn.sock fail_timeout=0; } upstream pulse_web_sockets { server unix:/home/pulseweb/run/daphne.sock; } map $http_upgrade $connection_upgrade { default upgrade; '' close; } server { listen 80; server_name backend.com; return 301 https://$host$request_uri; } server { listen 443 http2 ssl; server_name backend.com; root /var/www/vhosts/backend.com; location ~ /.well-known { allow all; } include snippets/ssl-params.conf; ssl_certificate /etc/letsencrypt/live/backend.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/backend.com/privkey.pem; client_max_body_size 4G; access_log /var/log/nginx/pulse-access.log; error_log /var/log/nginx/pulse-error.log info; location /static/ { alias /var/www/vhosts/backend.com/static/; } location /pulse_events { proxy_pass http://pulse_web_sockets; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } location / { proxy_redirect off; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Host $http_host; proxy_set_header X-NginX-Proxy true; proxy_set_header Connection ""; proxy_http_version 1.1; server_tokens off; proxy_buffering on; if (!-f $request_filename) { proxy_pass http://pulse_web_server; break; } } }

Este es mi requisitos.txt:

 asgi-redis==0.14.0 asgiref==0.14.0 asyncio==3.4.3 autobahn==0.16.0 channels==0.17.2 daphne==0.14.3 Django==1.10 django-extensions==1.7.2 django-webpack-loader==0.3.3 djangorestframework==3.4.4 msgpack-python==0.4.8 python-dateutil==2.5.3 redis==2.10.5 requests==2.11.0 six==1.10.0 Twisted==16.2.0 txaio==2.5.1 zope.interface==4.2.0

Cualquier idea sería muy apreciada.

about 3 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Tengo una configuración de trabajo para Django+Daphne+nginx+ssl sin ningún problema, ejecuto daphne a través del supervisor con el siguiente archivo de configuración:

 [program:project] directory=<project_directory> command=daphne -u <path_to_socket>/daphne.sock --root-path=<project_directory> <project>.asgi:channel_layer stdout_logfile = <log_path> stderr_logfile= <error_log_path> [program:project_asgi_workers] command=python <project_directory>/manage.py runworker stdout_logfile=<log_file_path_2> stderr_logfile=<log_error_path_2> process_name=asgi_worker%(process_num)s numprocs=2 environment=LANG=en_US.UTF-8,LC_ALL=en_US.UTF-8 ; Set UTF-8 as default encoding autostart=true autorestart=true redirect_stderr=true stopasgroup=true

Para detener e iniciar estos trabajadores, ejecuto los comandos:

  • sudo supervisorctl stop all
  • sudo supervisorctl start all

Dentro de nginx tengo la siguiente configuración para conectarme a mis websockets:

 location /pulse_events/ { proxy_pass http://unix:<path_to_socket>/daphne.sock; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Host $server_name; }

Usé en este proyecto daphne versión 1.4.1, asgi-redis 1.4.3, redis 2.10.6 y canales 1.1.8.

Si aún tiene problemas, tal vez también sea una buena idea verificar su enrutamiento y los consumidores en busca de canales de django.

about 3 years ago · Santiago Trujillo Denunciar

0

su nginx espera una solicitud wss , no una solicitud ws .

about 3 years ago · Santiago Trujillo Denunciar

0

Uso Django + Daphne + Nginx + SSL y aquí está mi nginx mysite.conf. Se perdió su archivo conf para manejar la solicitud /ws. Y ws y wss se manejarán con estos parámetros. Asegúrese de tener un servidor de socket backend como Daphne (veo que lo tiene), y ejecute este servidor en bash y acepte la solicitud en 8443 (esto es importante porque la mayoría de los servidores solo permiten este socket). Y disfrútalo..

 location /ws { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-for $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_pass http://127.0.0.1:8443; }
about 3 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Nuestro proceso Comercial
Legal
Términos y condiciones Política de privacidad
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recomiéndame algunas ofertas
Necesito ayuda