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

在AWS EC2多应用场景下配置带SSL的自定义域名路由

基于NGINX的HTTPS反向代理配置方案(适配你的AWS EC2多服务场景)

前置准备

已完成事项:

  • DNS服务商处将api.mydomain.com指向EC2公网IP
  • EC2上Docker化的Node(3001端口)和Python(8001端口)服务正常运行
  • 已拥有有效的SSL证书(包含证书文件和私钥)

步骤1:在EC2上安装NGINX

根据EC2系统选择对应命令:

  • Ubuntu/Debian:
    sudo apt update && sudo apt install nginx -y
    
  • Amazon Linux/CentOS:
    sudo yum install nginx -y
    

安装完成后启动并设置开机自启:

sudo systemctl start nginx && sudo systemctl enable nginx

步骤2:上传SSL证书到EC2

  1. 创建证书存储目录:
    sudo mkdir -p /etc/nginx/ssl/
    
  2. 将你的证书文件(如mydomain.crt)和私钥文件(如mydomain.key)上传到该目录(可通过scp或AWS SSM传输)
  3. 设置私钥权限(必须严格限制,否则NGINX无法启动):
    sudo chmod 600 /etc/nginx/ssl/mydomain.key
    

步骤3:配置NGINX反向代理

  1. 备份默认配置文件:
    sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/default.bak
    
  2. 编辑默认配置文件:
    sudo nano /etc/nginx/sites-available/default
    
  3. 替换为以下配置(注意替换证书路径为你实际的文件路径):
    server {
        listen 80;
        server_name api.mydomain.com;
        # 强制HTTP请求跳转至HTTPS
        return 301 https://$host$request_uri;
    }
    
    server {
        listen 443 ssl;
        server_name api.mydomain.com;
    
        # 指定SSL证书和私钥路径
        ssl_certificate /etc/nginx/ssl/mydomain.crt;
        ssl_certificate_key /etc/nginx/ssl/mydomain.key;
    
        # 基础SSL安全配置(可选但推荐)
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_ciphers HIGH:!aNULL:!MD5;
    
        # 转发/node路径到Node服务
        location /node/ {
            # 移除请求路径中的/node前缀,避免后端服务收到带前缀的路径
            rewrite ^/node/(.*)$ /$1 break;
            proxy_pass http://localhost:3001;
            # 传递客户端请求头,确保后端服务能正确获取请求信息
            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;
        }
    
        # 转发/python路径到Python服务
        location /python/ {
            rewrite ^/python/(.*)$ /$1 break;
            proxy_pass http://localhost:8001;
            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;
        }
    }
    

步骤4:验证配置并重启NGINX

  1. 检查配置是否合法:
    sudo nginx -t
    
    若输出nginx: configuration file /etc/nginx/nginx.conf test is successful则说明配置正确。
  2. 重启NGINX使配置生效:
    sudo systemctl restart nginx
    

步骤5:配置EC2安全组

登录AWS控制台,找到EC2实例对应的安全组,添加以下入站规则:

  • 允许HTTPS(443端口),来源设为0.0.0.0/0(或你需要的访问范围)
  • 允许HTTP(80端口),来源设为0.0.0.0/0(用于跳转HTTPS)
  • (可选更安全)限制3001和8001端口仅允许本地访问:添加入站规则,端口范围3001,8001,来源127.0.0.1/32

常见问题排查

  • 若访问https://api.mydomain.com/node出现SSL错误:检查证书路径是否正确,私钥权限是否为600,证书是否包含中间证书(若有,需将中间证书内容追加到主证书文件末尾)
  • 若后端服务返回404:检查rewrite规则是否正确,或后端服务是否能处理去掉/node//python前缀后的请求路径
  • 若NGINX无法启动:查看日志sudo journalctl -u nginx排查具体错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 01:48:27