Nginx API 代理表单数据和自定义标头未传递给远程 API

Nginx API 代理表单数据和自定义标头未传递给远程 API

我想为此目的设置一个 Nginx。

语境

  • 从根 URL 提供 Angular 2 dist 静态文件:http://example.com->index.html显示/home/www/index.html

  • 在我的 Angular2 项目中,我/api/some-endpoints在 GET 和 POST 中本地进行了一些调用。

  • 我希望将呼叫/api/{ANY-PATH}按原样重定向到远程私有 URL。我需要使用我的自定义标头进行调用(例如表单数据或 apikey 标头)并将另一个 apikey 添加到对远程服务器的请求中

我的问题

当对 进行 POST 调用(从安装了 nginx 的机器)时/api/document,使用表单数据值(包含上传的文件)和我的自定义标头:apikey , 253018b8425f4eb08291a1b68c4bc328

远程服务器似乎没有接收表单数据和 apikey。

我的配置

upstream api-server {
    server myprivate-api-server.com:8000;
}

map $http_apikey $api_route {
    default "error";
    253018b8425f4eb08291a1b68c4bc328 'api-server';
}

server {
        listen 80;
        index index.html;
        server_name example.com;

        location = /501_apikey.html {
                root /home/www/error_pages;
                internal;
        }

        location ~ /api/(?<path>.*) {

            if ($request_method = OPTIONS ) {           
                add_header 'Access-Control-Allow-Origin' "$http_origin";
                add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
                add_header 'Access-Control-Allow-Headers' 'apikey';
                return 200;
            }

            if ($api_route = "error"){return 501;}

            set $clientapikey "hW4g5V60UT2O3iQP1PS2g29hKjQ403E5";
            error_page 501 /501_apikey.html;

            add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT';
            add_header 'Access-Control-Allow-Headers' 'apikey';
            add_header 'clientapikey' $clientapikey;

            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-NginX-Proxy true;    
            proxy_pass http://$api_route/$path$is_args$args;
            proxy_set_header X-Forwarded-For $remote_addr;
            proxy_set_header X-Forwarded-Host $remote_addr;
            proxy_ssl_session_reuse off;
            proxy_set_header Host $http_host;
            add_header 'Access-Control-Allow-Headers' 'apikey';
            proxy_redirect off;
        }
}

附加问题

我添加客户端第二个密钥的方式有效吗?

add_header 'clientapikey' $clientapikey;

我将来需要为我的每个客户端创建一个位置,每个位置都使用不同的位置clientapikey来在远程 API 上识别它们。

相关内容