AWS 代理服务器搭建指南:反向代理配置、Nginx 部署与企业应用场景

在 AWS 上部署代理服务器的大多数企业实际需要的是反向代理,而不是用于翻墙或隐藏客户端的正向代理。
两者虽然都叫代理服务器,但代理的对象和解决的问题完全不同。把这个区别搞清楚,才能判断自己需要什么架构、应该用哪种实现方案。

企业适合正向代理和反向代理

正向代理代理的是客户端——客户端把请求发给代理,由代理去访问目标服务器,目标服务器看到的是代理的 IP 而不是客户端真实 IP。
常见的企业用途是统一管控员工的上网出口,或者隐藏内部客户端身份。

反向代理代理的是服务端——客户端访问代理服务器,由代理决定把请求转发给哪个后端服务器,后端服务器对客户端不可见。
客户端以为自己在直接访问目标服务器,但实际上所有请求都经过了代理层的处理和分发。

在 AWS 上,企业部署的几乎都是反向代理。典型场景包括:

  • 多个 EC2 实例运行同一个 Web 应用,通过 Nginx 统一入口分发流量,实现负载均衡
  • HTTPS 证书只配置在代理层,后端实例走 HTTP 内网通信,减少证书管理成本
  • API 网关前置一层代理,统一处理鉴权、限流和日志记录
  • 隐藏后端真实 IP 和端口,配合 WAF 和 CloudFront 形成完整的安全防护链

两种实现方案对比:EC2 + Nginx vs AWS ALB

在 AWS 上实现反向代理有两种方式:自建 EC2 + Nginx或者使用 AWS 托管的 ALB(Application Load Balancer)。
两者本质上都是七层反向代理,差别在于灵活性、运维成本和适用场景。

对比项EC2 + NginxAWS ALB
初始成本EC2 实例费用(t3.small 约 $15/月)按小时 + 按 LCU 双重计费(约 $20/月起)
配置灵活性最高,完全自定义路由和中间件中等,规则数量有上限
高可用需自行配置多 AZ 部署原生多可用区,自动故障转移
运维工作量较高,需维护 Nginx 配置和证书极低,AWS 全托管
SSL 证书需自行配置 Certbot 或上传证书ACM 免费证书,自动续签
适合场景复杂路由逻辑、成本敏感、定制需求多生产环境、团队运维资源有限

EC2 + Nginx 自建反向代理

Nginx 方案灵活性最高,可以精细控制路由规则、缓存策略、请求改写和响应头修改。适合有复杂路由逻辑、需要自定义中间件、或者预算有限不希望为 ALB 支付固定时长费用的场景。代价是需要自行维护 Nginx 配置、处理证书续签、以及规划高可用部署。

AWS ALB 托管反向代理

ALB 本质上就是 AWS 托管的七层反向代理,支持按路径、按 Header、按主机名路由,支持蓝绿部署和金丝雀发布,与 ACM 深度集成实现 HTTPS 证书自动续签。
适合生产环境需要高可用、团队没有专职运维、或者业务有弹性扩缩容需求的场景。如果已经在 AWS 上运行生产业务,ALB 通常是更稳妥的选择。

在 EC2 上用 Nginx 配置反向代理

实例选型与系统选择

Nginx 反向代理本身对计算资源的消耗不大,主要消耗是网络 I/O 而非 CPU 和内存。通用型 t3.small(2 vCPU、2GB 内存)处理中等流量完全够用,高流量场景可以升级到 t3.medium 或 c6i.large。
操作系统推荐 Amazon Linux 2023 或 Ubuntu 22.04 LTS,软件包支持均完善,官方文档资料最丰富。

实例应部署在公有子网,配置弹性公网 IP 接收外部流量,或者挂在 ALB 后方接收分发下来的流量。
后端应用服务器放私有子网,不配置公网 IP。关于不同实例系列的适用场景和性能区别可以参考AWS EC2 实例类型选择指南

Nginx 安装与基础反向代理配置

在 Amazon Linux 2023 上安装 Nginx:

sudo dnf install nginx -y

sudo systemctl enable nginx

sudo systemctl start nginx

Ubuntu 系统:

sudo apt update && sudo apt install nginx -y

sudo systemctl enable nginx

基础反向代理配置文件放在 /etc/nginx/conf.d/proxy.conf:

server {

    listen 80;

    server_name your-domain.com;

    location / {

        proxy_pass http://10.0.1.10:8080;

        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;

        proxy_connect_timeout 30s;

        proxy_read_timeout 60s;

    }

}

几个配置项的判断逻辑:proxy_pass 填写后端应用服务器的私有 IP 和端口;X-Real-IP 和 X-Forwarded-For 头部用于向后端传递客户端真实 IP,后端日志才能记录正确来源,不配置的话后端看到的全是代理服务器的 IP;proxy_connect_timeout 和 proxy_read_timeout 根据后端响应速度设置合理值,避免因超时导致 502 报错。

配置完成后:

sudo nginx -t          # 验证语法

sudo systemctl reload nginx  # 热重载,不中断现有连接

HTTPS 配置与证书自动续签

如果使用 EC2 自建方案,可以通过 Certbot 免费申请 Let’s Encrypt 证书并自动完成 Nginx 配置:

sudo dnf install certbot python3-certbot-nginx -y

sudo certbot –nginx -d your-domain.com

Certbot 会自动修改 Nginx 配置,将 HTTP 请求重定向到 HTTPS,并配置 SSL 证书路径。设置自动续签:

echo “0 12 * * * root certbot renew –quiet” | sudo tee -a /etc/crontab

Let’s Encrypt 证书有效期 90 天,上述 cron 任务每天中午检查一次,证书到期前 30 天自动续签。
如果选 ALB 方案,这一步完全不需要,在 ALB 监听器上绑定 ACM 证书即可,ACM 负责自动续签。

安全组与 VPC 网络架构配置

代理服务器部署后最常见的问题是端口不通或后端无法访问,根本原因几乎都出在安全组规则或 VPC 网络配置上。

安全组规则配置

代理服务器(Nginx EC2 实例)的安全组需要分两个方向配置。

入站规则(接收外部用户请求):

  • TCP 80,来源 0.0.0.0/0——接收 HTTP 请求
  • TCP 443,来源 0.0.0.0/0——接收 HTTPS 请求
  • TCP 22,来源管理 IP 段——SSH 管理,不要对 0.0.0.0/0 开放

出站规则(转发到后端服务器):

  • TCP 后端应用端口(如 8080),目标为后端服务器安全组 ID

后端应用服务器的安全组入站规则,只允许来自代理服务器安全组的流量,完全不对公网开放。这是最关键的安全设计——即使代理层被穿透,后端服务器也没有公网入口可以直接访问。安全组的具体配置操作和常见排错方法,可以参考 AWS 安全组怎么配置?

VPC 网络架构:代理层与应用层分离

标准的三层架构是:代理服务器(Nginx 或 ALB)放公有子网,后端应用服务器放私有子网,数据库放独立的私有子网,通过安全组控制各层之间的访问权限。

这种架构下应用服务器和数据库不配置公网 IP,外部流量只能通过代理层进入,攻击面最小化。
代理层可以配置多个可用区实现高可用,即使单个 AZ 故障,流量自动切换到其他 AZ 的代理实例。关于 VPC 子网划分、路由表和公私网分离架构的完整设计,可以参考 AWS VPC 网络配置教程 

出站流量成本:代理服务器的隐性费用

这是很多人部署反向代理前没有想清楚的成本问题。反向代理是所有请求的中转点,所有响应内容都通过代理服务器返回给客户端,这意味着出站流量完全由代理层承担,而不是分散在各个后端实例上。

AWS 的出站流量费约 $0.09/GB(美国区),亚太区约 $0.08–0.12/GB。
一个日均 10 万 PV、平均响应体积 200KB 的网站,每月出站流量约 600GB,仅带宽费用就接近 $60。如果是视频、大文件下载类业务,出站流量费会更高,有时会超过 EC2 实例本身的费用。

缓解出站流量成本最直接的方式是把静态资源(图片、CSS、JS、视频)交给 CloudFront CDN 分发,代理层只处理动态 API 请求和服务端渲染页面,大幅减少直接从 EC2 出站的流量。CloudFront 到终端用户的流量费比 EC2 直接出站便宜,而且 CloudFront 到 EC2 源站的回源流量走 AWS 内网,不产生额外费用。关于出站流量计费逻辑和实际降低账单的方法,可以参考 AWS 出站流量费

常见反向代理应用场景

多后端统一入口与路径路由

Nginx 根据 URL 路径把请求分发到不同后端服务,是微服务架构中最常见的使用方式:

server {

    listen 80;

    server_name api.your-domain.com;

    location /api/ {

        proxy_pass http://10.0.1.10:8080;

    }

    location /admin/ {

        proxy_pass http://10.0.1.20:8090;

        allow 10.0.0.0/8;    # 只允许内网访问

        deny all;

    }

    location /static/ {

        proxy_pass http://10.0.1.30:80;

        proxy_cache_valid 200 1d;    # 静态资源缓存 1 天

    }

}

负载均衡配置

Nginx 内置 upstream 模块支持多种负载均衡策略:

upstream backend {

    least_conn;                      # 最少连接数策略

    server 10.0.1.10:8080;

    server 10.0.1.11:8080;

    server 10.0.1.12:8080;

    keepalive 32;                    # 保持长连接,减少握手开销

}

server {

    listen 80;

    location / {

        proxy_pass http://backend;

    }

}

least_conn 策略将新请求分发给当前连接数最少的后端实例,比默认的轮询策略更适合响应时间差异较大的场景。

请求限流与防刷

在 Nginx 层配置限流比在应用层处理更高效,流量在进入业务逻辑前就被过滤:

http {

    limit_req_zone $binary_remote_addr zone=api_limit:10m rate=10r/s;

    server {

        location /api/ {

            limit_req zone=api_limit burst=20 nodelay;

            proxy_pass http://backend;

        }

    }

}

上述配置对每个 IP 限制每秒最多 10 个请求,允许突发最多 20 个请求。超出限制的请求直接返回 429,不会到达后端应用服务器。

AWS 账号开通与代理充值

搭建 AWS 代理服务器需要有效的 AWS 账号。
官网注册需要绑定海外信用卡,这是国内用户最常见的开户门槛。
通过 AWS 代理商 渠道开户,免绑卡、支持 USDT、支付宝和对公转账,充值享折扣返点,长期项目叠加返点后的年度实际成本低于官网直充。
企业项目在正式部署代理服务器前,建议提前确认账号归属、计费方式和目标区域资源配额,避免上线后才发现配置受限。

滚动至顶部