在AWS Ubuntu EC2上配置Daphne通过Nginx 443端口实现HTTPS访问
解决方案:Nginx反向代理Daphne并兼容静态资源(满足WebRTC HTTPS要求)
你的思路完全正确——必须通过Nginx的443端口反向代理Daphne服务,因为WebRTC规范强制要求在HTTPS环境下才能访问用户媒体设备,直接访问8000端口的HTTP服务不符合要求,且你已通过Certbot配置了合法的TLS证书,正好利用Nginx做HTTPS入口,同时兼顾静态资源和Django/Daphne的动态请求。
具体Nginx 443端口配置调整
你不需要替换现有443端口的静态HTML配置,而是让Nginx根据请求路径做分流:匹配静态资源路径的请求直接返回本地文件,其余请求(包括Django页面、WebSocket连接)转发给本地8000端口的Daphne服务。
修改你的Nginx配置文件(通常位于/etc/nginx/sites-available/mysite.co),示例如下:
server { listen 443 ssl; server_name www.mysite.co mysite.co; # Certbot生成的TLS证书路径(保持你现有配置即可) ssl_certificate /etc/letsencrypt/live/mysite.co/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/mysite.co/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # 静态资源路径配置(替换为你实际的静态文件目录) root /path/to/your/static/files; # 匹配静态资源请求,直接返回本地文件 location /static/ { expires 30d; add_header Cache-Control "public, max-age=2592000"; } # 如果有媒体资源,也可以单独配置 location /media/ { expires 30d; add_header Cache-Control "public, max-age=2592000"; } # 所有非静态资源的请求,转发给Daphne服务 location / { # 反向代理到本地8000端口的Daphne proxy_pass http://127.0.0.1:8000; 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-Proto $scheme; # WebSocket支持(Django Channels必备) proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_connect_timeout 7d; proxy_send_timeout 7d; proxy_read_timeout 7d; } } # 可选:将HTTP请求强制跳转HTTPS server { listen 80; server_name www.mysite.co mysite.co; return 301 https://$host$request_uri; }
关键配置说明
- 静态资源分流:
location /static/和location /media/会优先匹配,确保静态HTML、CSS、JS等资源直接从Nginx返回,提升性能。 - WebSocket支持:
proxy_http_version 1.1及Upgrade头配置是Django Channels处理WebSocket连接的必要条件,WebRTC的媒体流传输依赖WebSocket通道,这部分必须配置。 - HTTPS强制跳转:添加80端口的server块,将所有HTTP请求重定向到HTTPS,避免用户访问非安全地址。
后续操作步骤
- 保存配置文件后,测试Nginx配置合法性:
sudo nginx -t - 重启Nginx服务:
sudo systemctl restart nginx - 验证Supervisor管理的Daphne服务仍正常运行:
sudo supervisorctl status - 访问
https://www.mysite.co,检查Django页面是否正常加载,WebRTC是否能正常获取音频流。
内容的提问来源于stack exchange,提问作者felixjrd
相关产品推荐
相关产品推荐

