2016-09-20 125 views
1

我想配置Nginx反向代理服务器,它将通过HTTP将所有请求重定向到我的AWS Api Gateway端点(它是一种GET方法)。 (如果你想知道为什么,原因是我有一个AWS Lambda函数,我希望第三方供应商通过Api网关进行调用,但是他目前有一个ssl_handshake与AWS的错误,可能是因为SNI。我会给他这个HTTP代理服务器)。Nginx proxy_pass to aws Api网关

我已经试过这样的事情:

server { 
     listen  80 default_server; 
     listen  [::]:80 default_server; 
     server_name MY_SERVER_NAME; 
     root   /usr/share/nginx/html; 

     # Load configuration files for the default server block. 
     include /etc/nginx/default.d/*.conf; 

     location/{ 
       proxy_set_header Host $host; 
       proxy_set_header X-Real-IP $remote_addr; 
       proxy_pass https://SOMETHING.execute-api.REGION.amazonaws.com/dev/RESOURCE/METHOD;    
       proxy_ssl_server_name on; 
       proxy_ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 
       proxy_buffering off; 
     } 
} 

但我目前从CloudFront的获取403,当我尝试打电话

http://MY_SERVER_NAME 

我觉得我缺少的东西我在Nginx的SSL配置,但我不知道是什么。

+1

其他客户选择在他们的API网关API前放置CloudFront分配以解决API网关的SNI需求。 –

+0

这工作!谢谢。有没有任何指导去做到这一点?这并不容易。此外,它使用CDN服务成为不带缓存的代理服务器非常丑陋,正如我刚刚所做的那样 - 它可以与其他服务一起使用,可能是AWS LoadBalancer? – yishaiz

+0

Elastic Load Balancer只能将流量发送到EC2实例。 –

回答

1

作为@Bob Kinney在评论中提出的建议,我通过使用AWS CloudFront而不是此Nginx自定义代理服务器来实现代理。

这些步骤如下:

  1. 转到分布,创造新的分配。
  2. 将Origin设置为Lambda函数的S3存储桶。
  3. 在这个分布创建新的原点,并留下领域为默认 除外:
    • 设置它的原产地域名,以拉姆达 功能的ApiGateway终点。例如。 t7mcsqqzcl.execute-api.us-west-1.amazonaws.com
    • 设定的原点协议政策为HTTPS只有
  4. 新原产地创建新的行为,并设置如下:
    • 路径模式:*
    • 浏览器协议政策:HTTP和HTTPS
    • 允许的HTTP方法:GET,HEAD,OPTIONS,PUT,POST,PATCH,DELETE
    • 正向头:无
    • 正向饼干:无
    • 查询字符串转发和缓存:全部转发,缓存基于所有
  5. 检查新行为与优先级0,这是之前的S3起源的 其他默认行为。

现在我们有我们发行的域名,例如, d12q4segwfrwl5.cloudfront.net,我们可以激活我们的API,例如请致电http://d12q4segwfrwl5.cloudfront.net/dev/person/name

CloudFront配置的json配置示例可以在here找到。

+0

为什么需要点2.将Origin设置为Lambda函数的S3存储桶? –

+0

对不起,但我不记得现在的原因。这就是我在互联网上发现的小文档中所做的。也许是为了提供Lambda代码?欢迎您尝试一下,如果有效,请发布更新。 – yishaiz