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



我需要使用 nginx 实现以下测试用例:

www.example.com/api/应重定向到ABC.com/api,而www.example.com/api/site/login应该重定向到XYZ.com/api/site/login

但在浏览器中,用户应该只看到www.example.com/api....(而不是重定向的 URL(。

请让我知道如何实现这一点。

> 堆栈溢出规则禁止使用 ABC.com,因此在示例配置中,我使用域名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://(

location指令的顺序并不重要,因为正如文档所述,选择了具有最长匹配前缀的位置。

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

无需

proxy_pass 参数中指定 URI,因为如文档所述,如果在没有 URI 的情况下指定proxy_pass,则请求 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;
    ...
}

试试这个:

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

当NGINX代理请求时,它会将请求发送到指定的 代理服务器,获取响应,并将其发送回客户端。 可以将请求代理到HTTP服务器(另一个NGINX 服务器或任何其他服务器(或非 HTTP 服务器(可以运行 使用特定框架开发的应用程序,例如 PHP 或 Python(使用指定的协议。支持的协议包括 FastCGI、uwsgi、SCGI 和 memcached。

要将请求传递给 HTTP 代理服务器,proxy_pass 指令 在位置内指定。

来自NGINX Docs的资源

相关内容

  • 没有找到相关文章

最新更新