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

时间:2017-01-04 16:39:00

标签: nginx nginx-location

我想为此设置一个Nginx。

上下文

  • 从根网址提供Angular 2 dist静态文件:http://example.com - >在index.html

  • 上显示/home/www/index.html
  • 在我的Angular2项目中,我在GET,POST中本地调用了/api/some-endpoints

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

    < / LI>

我的问题

在进行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上识别它们。

0 个答案:

没有答案