我目前在http://example.com/api/v3/下运行api,我想将api移动到http://exampleapi.com/v3的不同服务器上。
我首先想到在nginx中创建一个位置块来处理如下请求:
location ~*/api/(v[0-9]+/[a-zA-Z0-9_]+) {
return 301 $scheme://exampleapi.com/$1;
}
然而,使用REST客户端,请求被作为GET请求而不是POST请求接收。使用浏览器(Firefox)也是如此。
我已经尝试代理通过,但我不能使它工作。这是我尝试过的:
location ~*/api/(v[0-9]+/[a-zA-Z0-9_]+) {
proxy_pass http://exampleapi.com/$1;
# proxy_redirect http://exampleapi.com/ /;
proxy_read_timeout 60s;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
我得到502或500。
实现移动api的最佳方式是什么?
在本地调试相同的问题后,我发现我不能代理传递到一个域,而只能传递到IP地址,因为没有解析器来解析这个域。
因此,我为exampleapi.com创建了一个新的服务器块来侦听端口,并将代理传递到该端口,例如: location ~*/api/(v[0-9]+/[a-zA-Z0-9_]+) {
proxy_pass http://127.0.0.1:4545/$1;
proxy_read_timeout 60s;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}