• Jobs
  • About Us
  • professionals
    • Home
    • Jobs
    • Courses and challenges
    • Questions
    • Teachers
  • business
    • Home
    • Post vacancy
    • Our process
    • Pricing
    • Assessments
    • Payroll
    • Blog
    • Sales
    • Salary Calculator

0

518
Views
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 answers
Answer question

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 Report

0

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

about 3 years ago · Santiago Trujillo Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Our process Sales
Legal
Terms and conditions Privacy policy
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recommend me some offers
I have an error