在nginx上设置proxy_pass以对API网关进行API调用

Sco*_*ord 2 nginx aws-lambda aws-api-gateway

问题:

我已经在API网关后面建立了一个Lambda函数,它可以很好地工作.我有一个托管网站,我只想要某个位置来访问API.

https://www.example.com/(从托管服务器提供html)

https://www.example.com/foobar(返回由Lambda生成并由AWS返回的JSON有效内容)

这是我的服务器块:

   location = /foobar {
            proxy_pass     https://someawsuri;
            proxy_redirect default;
    }

    location / {
            # First attempt to serve request as file, then
            # as directory, then fall back to displaying a 404.
            try_files $uri $uri/ =404;
    }
Run Code Online (Sandbox Code Playgroud)

我已经尝试过审阅文档并阅读多篇SO帖子,但我无法做到我想要的.我尝试过的所有东西都产生了错误502 Bad Gateway.

题:

如何配置nginx向API网关发出请求?

谢谢.

Lou*_*ché 7

我想你需要这两行:

proxy_set_header Host "XXXXXX.execute-api.REGION.amazonaws.com";
proxy_ssl_server_name on;
Run Code Online (Sandbox Code Playgroud)

以下是对原因的解释:

HOST如描述是必需的报头这里

Amazon API Gateway端点.此值必须是"区域"和"端点"下列出的区域相关端点之一.在美国东部(弗吉尼亚北部)地区,它是apigateway.us-east-1.amazonaws.com.

proxy_ssl_server_name on;

在与代理的HTTPS服务器建立连接时,允许通过TLS服务器名称指示扩展(SNI)传递服务器名称.