You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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,避免用户访问非安全地址。

后续操作步骤

  1. 保存配置文件后,测试Nginx配置合法性:
    sudo nginx -t
    
  2. 重启Nginx服务:
    sudo systemctl restart nginx
    
  3. 验证Supervisor管理的Daphne服务仍正常运行:
    sudo supervisorctl status
    
  4. 访问https://www.mysite.co,检查Django页面是否正常加载,WebRTC是否能正常获取音频流。

内容的提问来源于stack exchange,提问作者felixjrd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 07:10:32