我想为此目的设置一个 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 上识别它们。