EC2实例部署的Uvicorn+Nginx应用如何配置HTTPS访问
问题根因
你遇到的ERR_SSL_PROTOCOL_ERROR错误核心原因是:仅将Nginx监听端口改为443但未配置SSL证书及HTTPS相关参数,Nginx在443端口仍按HTTP协议响应,浏览器用HTTPS协议发起请求时握手失败,因此报错。
解决步骤
- 第一步:生成SSL证书
如果只是测试用,可先生成自签名证书;如果是生产环境使用,建议绑定域名后申请可信CA颁发的免费证书即可。
生成自签名证书执行命令:
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/nginx-selfsigned.key -out /etc/ssl/certs/nginx-selfsigned.crt
执行过程中提示输入信息时,Common Name项填写你的EC2公网IP12.34.56.78即可。
- 第二步:修改Nginx的Hosting配置文件
替换为以下内容:
# 可选配置:HTTP请求自动跳转HTTPS server { listen 80; server_name 12.34.56.78; return 301 https://$host$request_uri; } server { listen 443 ssl; server_name 12.34.56.78; # 关联SSL证书 ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt; ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key; # 通用SSL安全配置 ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5; location / { 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; } }
- 第三步:重载Nginx配置生效
先验证配置语法是否正确:
sudo nginx -t
提示test is successful后执行重载命令:
sudo systemctl reload nginx
- 第四步:访问验证
自签名证书不受浏览器信任,首次访问会弹出不安全提示,手动选择「高级-继续访问」即可正常使用服务。
内容的提问来源于stack exchange,提问作者Madhav mishra
相关产品推荐
相关产品推荐

