2017-07-27 44 views
0

我想转发特定的uri如果匹配到nginx后端。例如转发匹配的具体位置和代理重定向它在nginx

向前https://www.hostname.com/*/A/B/Chttps://int.hostname.com/*/A/B/C(其中*是从正则表达式填充的变量自动)

当前配置看起来像以下,而且不知道如何上面

location /a/b/c/ { 
    proxy_set_header  Host $proxy_host; 
    proxy_set_header  X-Forwarded-Proto $scheme; 
    proxy_set_header  X-Real-IP $remote_addr; 
    proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_read_timeout  180m; 

    proxy_pass http://int.hostname.com/v2/e/t/a/b/c; 
    proxy_redirect default; 
} 
+0

为了澄清,在的情况下URI匹配的“/ */A/B/C”是在发送给内部服务器上的相同的路径,或者是有一些修改?例如如果有人点击/ v1/a/b/c,你只是在与内部的/ v1/a/b/c进行交谈?或者是“/ v1”部分多少重要 –

+0

@JoshuaDeWald它会一样的。/v1/a/b/c将被传递为/ v1/a/b/c。类似地,/ sample/v2/a/b/c将作为/ sample/v2/a/b/c传递。 *表示任何路径。 谢谢 – Err0rr

回答

1

继续。如果你希望你的位置,匹配以/a/b/c/结尾的URI,您将需要使用正则表达式语法。详情请参阅this document

proxy_pass语句的URI后缀是可选的。在没有URI后缀的情况下,原始URI将不加修改地传递。详情请参阅this document

例如:

location ~ /a/b/c/$ { 
    ... 
    proxy_pass http://int.hostname.com; 
    ... 
} 
+0

谢谢我会看看那些文档。你的意思是我需要在proxy_pass中写任何东西?实际上,URI可能不以/ a/b/c /结尾。考虑到这一点,如果它不以此结束,应该怎么办? – Err0rr

+0

你的意思是'/ a/b/c /'嵌入在URI的任何地方?在这种情况下,删除终止'$'。 –

+0

是的,就是这样,它也应该转发完全相同的后端。如果URI不包含'/ a/b/c /',那么它不应该将URI转发到后端。我希望这可以工作。如果还有什么我应该照顾的请让我知道。我会测试它。 – Err0rr