如何使用NGINX作为跨域反向代理

6
我需要使用Nginx实现以下测试用例:
- www.example.com/api/应该重定向到ABC.com/api - 而www.example.com/api/site/login应该重定向到XYZ.com/api/site/login 但在浏览器中,用户只应看到www.example.com/api....(而不是重定向URL)。
请告诉我如何实现这一点。
2个回答

8
ABC.com的使用受stackoverflow规则限制,因此在示例配置中我使用域名ABC.example.comXYZ.example.com
server {

    ...

    server_name www.example.com;

    ...

    location /api/ {
        proxy_set_header Host ABC.example.com;
        proxy_pass http://ABC.example.com;
    }

    location /api/site/login {
        proxy_set_header Host XYZ.example.com;
        proxy_pass http://XYZ.example.com;
    }

    ...

}

(如有必要,请将http://替换为https://)

由于文档 stateslocation指令的顺序无关紧要,因为选择具有最长匹配前缀的位置。

使用proxy_set_header参数,nginx将按照您需要的方式运行,并且用户将看到www.example.com/api...否则,如果没有此参数,nginx将生成HTTP 301重定向到ABC.example.com或XYZ.example.com。

proxy_pass参数中不需要指定URI,因为文档states中说明,如果未指定URI,则请求URI以与处理原始请求时客户端发送的形式传递给服务器。

您可以将您的服务器ABC.example.com和XYZ.example.com指定为域名或IP地址。如果您将它们指定为域名,您需要在服务器配置中指定附加参数resolver。如果您有本地名称服务器,您可以使用它,或者使用像Google公共DNS(8.8.8.8)或由您的ISP提供的DNS等外部服务。
server {

    ...

    server_name www.example.com;
    resolver 8.8.8.8;

    ...

}

-1

试试这个:

location /api {
    proxy_pass http://proxiedsite.com/api;
}

当NGINX代理请求时,它将请求发送到指定的代理服务器,获取响应并将其发送回客户端。可以使用指定的协议将请求代理到HTTP服务器(另一个NGINX服务器或任何其他服务器)或非HTTP服务器(可以运行使用特定框架开发的应用程序,例如PHP或Python)。支持的协议包括FastCGI、uwsgi、SCGI和memcached。
要将请求传递给HTTP代理服务器,需要在location内指定proxy_pass指令。
资源来自NGINX文档

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接