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

EC2上无域名部署Django并配置免费SSL证书实现HTTPS

问题解答

首先明确结论:主流免费SSL证书颁发机构(如Let's Encrypt)不支持直接为公网IP颁发证书,因为ACME协议的验证机制(HTTP-01、DNS-01)均依赖域名完成身份校验,公网IP无法满足这些验证要求。

针对你的场景,提供几个可行的解决思路:

1. 自签名证书 + 反向代理(测试/内部环境可用)

生成自签名SSL证书,搭配Nginx反向代理实现EC2上Django服务的HTTPS访问:

  • 在EC2服务器执行命令生成自签名证书:
    openssl req -x509 -newkey rsa:4096 -keyout /etc/ssl/private/django-key.pem -out /etc/ssl/certs/django-cert.pem -days 365 -nodes
    
  • 配置Nginx转发HTTPS请求到Django的HTTP端口(默认8000),在Nginx配置文件中添加如下server块:
    server {
        listen 443 ssl;
        server_name <你的EC2公网IP>;
    
        ssl_certificate /etc/ssl/certs/django-cert.pem;
        ssl_certificate_key /etc/ssl/private/django-key.pem;
    
        location / {
            proxy_pass http://127.0.0.1:8000;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }
    
  • 注意:自签名证书会被浏览器标记为“不安全”,需要前端服务手动信任该证书,仅适合测试或内部使用。

2. 临时HTTPS隧道(快速测试用)

使用ngrok之类的工具为EC2上的Django服务生成临时HTTPS地址:

  • 在EC2上安装ngrok后执行:
    ngrok http 8000
    
  • 工具会生成一个带HTTPS的临时域名(如https://xxxx-xx-xx-xx-xx.ngrok.io),前端可直接访问该地址。
  • 缺点:域名临时且带宽有限,仅适合短期测试。

3. 免费域名 + 正规SSL证书(生产环境推荐)

这是生产环境的标准解决方案:

  • 申请免费二级域名,将其解析到你的EC2公网IP。
  • 使用Let's Encrypt申请免费SSL证书,搭配Nginx或Apache实现SSL终止,将HTTPS请求转发到Django服务(用Gunicorn/uWSGI替代runserver作为生产服务器)。

重要提醒

python manage.py runserver是Django的开发服务器,性能和安全性都不满足生产环境要求,生产环境必须使用Gunicorn、uWSGI等专业应用服务器,配合Nginx/Apache做反向代理和SSL处理。

内容的提问来源于stack exchange,提问作者vishnu vardhan Gowd

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 15:52:11