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

AWS环境下Httpd反向代理API Gateway报错:读取远程服务器错误

解决Httpd反向代理到API Gateway的Proxy Error问题

咱们一步步拆解问题,找到解决办法:

1. 核心问题:错误的API Gateway目标域名

你当前配置里的ProxyPass目标是https://apigateway.amazonaws.com/,这是API Gateway的公网通用域名,但你用了VPC Link,说明你的API应该是私有API(Private API),这时候必须使用API Gateway的私有专属域名,而不是公网域名。

私有API的域名格式是:{你的API ID}.execute-api.{区域}.amazonaws.com,比如abc123.execute-api.us-east-1.amazonaws.com。你可以在API Gateway控制台的「设置」页面找到这个域名。

2. 修正Httpd代理配置

把ProxyPass和ProxyPassReverse的目标替换成你的API私有域名,还要加上你的API部署阶段(比如/prod),同时调整路径匹配逻辑。下面是修正后的配置示例:

<VirtualHost *:443>
    # Use HTTP Strict Transport Security to force client to use secure connections only
    Header always set Strict-Transport-Security "max-age=300; includeSubDomains; preload"
    ServerAdmin administrator@test.net
    ServerName www.test.net
    ServerAlias test.net
    DocumentRoot /var/www/html/test.net/public_html/

    SSLEngine on
    SSLCertificateFile /etc/httpd/selfsigned/server.crt
    SSLCertificateKeyFile /etc/httpd/selfsigned/server.key

    SSLProxyEngine On
    # 替换成你的API私有域名+部署阶段
    ProxyPass /myapi/ https://abc123.execute-api.us-east-1.amazonaws.com/prod/ retry=1 acquire=3000 timeout=24000 Keepalive=On
    ProxyPassReverse /myapi/ https://abc123.execute-api.us-east-1.amazonaws.com/prod/
    # 注释掉ProxyPreserveHost(私有API不需要传递你的域名作为Host头)
    # ProxyPreserveHost On
</VirtualHost>

3. 验证EC2到API Gateway的网络连通性

即使VPC Link显示正常,也要确认EC2能直接访问API的私有域名:

  • 登录EC2实例,执行curl -v https://{你的API私有域名}/prod/myapi(替换成你的实际路径)
  • 如果curl返回Lambda的响应,说明网络没问题;如果失败,排查以下点:
    • EC2所在子网的路由表是否有指向VPC Link的条目
    • EC2的安全组是否允许出站443端口到API Gateway的私有IP范围
    • API Gateway私有端点的安全组是否允许EC2的IP访问443端口
    • 确认VPC的DNS设置(启用enableDnsSupport和enableDnsHostnames),确保能解析API私有域名

4. 检查Httpd模块是否加载

确保Httpd已经加载了代理和SSL所需的模块:

  • 执行httpd -M查看模块列表,确认proxy_http_module和ssl_module存在
  • 如果缺失,需要启用这些模块(比如在CentOS/RHEL中,编辑/etc/httpd/conf.modules.d/00-proxy.conf和00-ssl.conf,确保对应的LoadModule行没有被注释)

5. 临时排查证书验证问题(可选)

如果网络连通但仍然报错,可能是证书信任问题,可以临时添加以下配置跳过验证(不建议长期使用,最好确保EC2信任AWS的根证书):

SSLProxyVerify none
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off

修改配置后,重启Httpd服务:systemctl restart httpd,再测试请求/myapi/应该就能正常转发到Lambda了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:59:43