EC2上使用Docker Compose部署的服务无法通过HTTPS访问
EC2上Docker Compose部署的服务HTTP正常但HTTPS无法访问排查
在EC2上通过Docker Compose部署服务,从GitHub拉取代码后本地构建运行,HTTP访问完全正常,但HTTPS无法访问。已完成AWS侧HTTPS相关配置,EC2终端能看到ELB-HealthChecker/2.0请求,推测负载均衡无异常,怀疑问题出在Docker或Nginx配置层面。
已完成的AWS HTTPS配置步骤
- 通过AWS Certificate Manager(ACM)创建证书并完成DNS验证,同时创建负载均衡
- 新建安全组,配置HTTP(80)和HTTPS(443)入站规则,来源设置为
0.0.0.0/0 - 创建HTTP协议的目标组并关联EC2实例
- 为负载均衡添加HTTPS监听器,并绑定ACM中的有效证书
- 目标组健康检查状态无异常
- 域名、EC2公网IP、负载均衡DNS均可通过HTTP访问服务,但HTTPS访问失败
相关配置文件
Docker Compose配置
version: '3' services: django_app: #can be any name, this name should match in default conf volumes: - static_vol:/app/sub_app/static - media_vol:/app/sub_app/media env_file: - .env build: context: . ports: - "8000:8000" nginx: build: ./nginx volumes: - static_vol:/app/sub_app/static - media_vol:/app/sub_app/media ports: - "80:80" depends_on: - django_app volumes: static_vol: media_vol:
Nginx default.conf配置
upstream django { server django_app:8000; } server { listen 80; location / { proxy_pass http://django; } location /static/ { alias /app/sub_app/static/; } location /media/ { alias /app/sub_app/media/; } }
排查建议
检查负载均衡HTTPS监听器转发规则
确认HTTPS监听器是否将请求转发到了正确的目标组(即关联EC2实例的HTTP目标组,端口80),若转发目标或端口配置错误,会导致HTTPS请求无法到达EC2。验证EC2安全组出站规则
确保EC2安全组允许出站流量,保证ELB的HTTPS请求能被EC2正常响应。检查EC2端口监听状态
在EC2终端执行netstat -tulnp,确认Nginx容器是否正常监听主机的80端口,验证端口映射无异常。测试EC2本地HTTPS响应
在EC2上临时给Nginx配置443端口监听(用自签证书测试),直接访问EC2的443端口,判断Docker/Nginx本身是否能处理HTTPS请求。检查负载均衡安全组
确认负载均衡安全组允许443端口的入站流量,同时允许转发到EC2目标组80端口的流量。查看容器日志
执行docker logs <nginx-container-id>,检查是否有HTTPS请求到达Nginx的日志。若无日志说明请求未到EC2,问题在负载均衡侧;若有日志但报错,再针对性排查Nginx配置。
内容的提问来源于stack exchange,提问作者Talha Anwar
相关产品推荐
相关产品推荐

