Nginx 将所有请求转发到另一个域

Nginx 将所有请求转发到另一个域

我一直在努力让整个设置工作。我在网上找到了一些零碎的东西,但没有一个能解决我的所有要求。我需要这样做才能让 IE8 工作,所以不幸的是我有点束手无策。我可以移动一些端点,但可能不会移动太多。

我有一个位于 的用户 API https://api.foo.com/1.0/users。该端点接受所有请求类型以及参数和动态段。以下是一些示例

我想配置 nginx 以接受来自另一个域和路径的请求并无缝地将它们转发到这些端点。例如

为了实现这一点,我需要转发请求参数以及表单数据。基本上整个请求需要完整转发然后返回。另请注意,我有几个不同的子域,所以这awesome只是我想更改的几个名称之一。

图案是这样的

http://example.com/api/<subdomain>/<details> -> https://<subdomain>.foo.com/1.0/<details>

我最大的困难是保持完全相同,以及传递不同类型的请求。

我的努力 我尝试了很多方法,但最接近的可能是这个

location ~ ^/api/(.*)/(*.) { 
    resolver 8.8.8.8;
    proxy_pass https://$1.foo.com/1.0/$2$is_args$args;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    #proxy_set_header X-Host $host;
}

**The `X-Host` directive doesn't work for me hence the comment

前两种情况适用,但第三种情况不适用。另外,我没有 POST 请求来处理这个问题。大多数情况下我都会502 Bad Gateway出错。在我看来,它并没有完全映射,而是在收到第一个“/”时就中断了。添加另一个带有 3 个正则表达式参数的位置指令也没有帮助我。

我真的很感激任何关于这个问题的帮助,因为我完全不知道下一步该做什么。

答案1

您的正则表达式不正确,您应该使用location ~ ^/api/([^/]+)/(.*)$,因为我不知道 PCRE 库如何选择 $1 作为子域,其内容很可能是awesome/users而不是awesome

相关内容