我需要代理将多个段进一步传递给另一个服务器,最多可以有两个5段。
nginx需要匹配什么
现在,代码如下,只匹配
为此,我们有这样的代码块:
location ~* ^/([a-z0-9]+)/?$ { proxy_pass http://@tds/direct/$1?$args; proxy_set_header Referer $http_referer; proxy_set_header X-Original-Host $server_name; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-NginX-Proxy true; proxy_redirect off; } location ~* ^/([a-z0-9]+)/([A-Za-zА-Яа-я0-9\-\_\[\]\{\}\.]+)/?$ { proxy_pass http://@tds/direct/$1/$2?$args; proxy_set_header Referer $http_referer; proxy_set_header X-Original-Host $server_name; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-NginX-Proxy true; proxy_redirect off; }
但是现在最多可以有5个分段,其中一个解决scheme基本上又增加了4个分段,例如5个分段的位置就像这样:
location ~* ^/([a-z0-9]+)/([A-Za-zА-Яа-я0-9\-\_\[\]\{\}\.]+)/([A-Za-zА-Яа-я0-9\-\_\[\]\{\}\.]+)/([A-Za-zА-Яа-я0-9\-\_\[\]\{\}\.]+)/([A-Za-zА-Яа-я0-9\-\_\[\]\{\}\.]+)/([A-Za-zА-Яа-я0-9\-\_\[\]\{\}\.]+)/?$ { proxy_pass http://@tds/direct/$1/$2/$3/$4/$5?$args; proxy_set_header Referer $http_referer; proxy_set_header X-Original-Host $server_name; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-NginX-Proxy true; proxy_redirect off; }
但是,这真的看起来像一个糟糕的解决scheme,考虑到链接也可以看起来像example.com/somehash/landing/5/segment1/segment2/segment3/segment4/segment5
这甚至是一个更加棘手的解决scheme,因为采用这种方法,将会有大约12个地点。
代理传递段到另一个服务器将看起来完全相同的方式,因为它看起来像一个段,所以有5个部分它会像这样@ tds /直接/ $ 1 / $ 2 / $ 3 / $ 4 / $ 5 / $ 6 (其中$ 1是' somehash“和2至6是可选的部分)
有没有适当的方法来做到这一点?
先谢谢你。
简单的location什么问题?
location / { proxy_pass http://@tds/direct/; proxy_set_header X-Original-Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-NginX-Proxy true; proxy_redirect off; }
它会将任何URI的请求http://example.com/hash/a/b/c?a=1委托给http://@tds/direct/hash/a/b/c?a=1 。
请参阅http://nginx.org/r/proxy_pass
如果
proxy_pass指令是用URI指定的,那么当一个请求被传递给服务器时,与该位置相匹配的标准化请求URI的一部分被指令中指定的URIreplace
PS没有必要为$http_variables使用proxy_set_header 。 它们是默认传递的。 另外X-Real-IP和X-Forwarded-For是多余的。