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

如何在EC2上开放8080端口用于HTTPS访问?解决Docker化Django连接问题

解决EC2上8080端口开放及Docker化Django的浏览器访问问题

1. 先搞定EC2安全组(核心环节)

EC2的入站规则必须放通8080端口,否则外部流量根本进不来:

  • 登录AWS控制台,找到你的EC2实例,点进它关联的安全组
  • 切换到「入站规则」标签,点「编辑入站规则」
  • 加两条规则(按需选):
    • 仅限自己访问:类型选「自定义TCP」,端口填8080,源地址填你的本地公网IP(格式xxx.xxx.xxx.xxx/32)
    • 测试用全网访问:类型选「自定义TCP」,端口填8080,源地址选「0.0.0.0/0」(生产环境别这么搞)
  • 保存规则

2. 检查EC2本地防火墙

如果EC2开了本地防火墙(比如ufw或者iptables),也得给8080开绿灯:

Ubuntu/用ufw的系统:

# 允许8080的TCP流量
sudo ufw allow 8080/tcp
# 重启防火墙生效
sudo ufw reload

Amazon Linux/用iptables的系统:

# 添加放行规则
sudo iptables -A INPUT -p tcp --dport 8080 -j ACCEPT
# 保存规则(Amazon Linux用这个)
sudo service iptables save

3. 确认Docker端口映射没搞错

本地跑正常,EC2不行?大概率是容器端口映射没做对:

  • 启动容器时,必须把容器内的Django端口(默认是8000)映射到EC2的8080:
docker run -d -p 8080:8000 你的Django镜像名
  • 用docker ps检查映射状态,输出里得有0.0.0.0:8080->8000/tcp这行,说明端口绑定正确

4. 让Django服务绑定0.0.0.0

Django默认只绑定127.0.0.1,只能容器内部访问,必须改成绑定所有地址:

  • 用runserver启动时:
python manage.py runserver 0.0.0.0:8000
  • 用Gunicorn等生产服务器的话,同样要绑定0.0.0.0:
gunicorn --bind 0.0.0.0:8000 你的项目名.wsgi:application

5. 给8080加HTTPS的两种方式

如果要让8080走HTTPS,分两种场景:

测试用:容器内直接配HTTPS

  • 修改Django的settings.py:
SECURE_SSL_REDIRECT = True
SESSION_COOKIE_SECURE = True
CSRF_COOKIE_SECURE = True
  • 启动时带上证书(仅测试,生产别这么干):
python manage.py runserver 0.0.0.0:8080 --cert-file /你的证书路径/cert.pem --key-file /你的密钥路径/key.pem

生产用:Nginx反向代理(推荐)

  • 在EC2上装Nginx,让它处理HTTPS,再转发到Docker容器:
    1. 安装Nginx:Ubuntu用sudo apt install nginx,Amazon Linux用sudo yum install nginx
    2. 创建Nginx配置文件/etc/nginx/sites-available/django:
    server {
        listen 8080 ssl;
        server_name 你的EC2公网IP;
    
        ssl_certificate /你的证书路径/cert.pem;
        ssl_certificate_key /你的密钥路径/key.pem;
    
        location / {
            proxy_pass http://localhost:8080; # 对应Docker映射的EC2端口
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }
    
    1. 启用配置并重启Nginx:
    sudo ln -s /etc/nginx/sites-available/django /etc/nginx/sites-enabled/
    sudo nginx -t # 检查配置是否合法
    sudo systemctl restart nginx
    

6. 最后测试

做完上面的步骤,浏览器直接访问http://<你的EC2公网IP>:8080(配了HTTPS就用https://)。如果还是连不上,排查这几点:

  • 别用EC2的私有IP,一定要用公网IP
  • 用docker logs <容器ID>看容器日志,有没有报错
  • 在EC2本地用curl http://localhost:8080测试,如果能返回内容,说明本地没问题,问题出在安全组或防火墙

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 22:10:29