Мне нужно передать несколько сегментов прокси на другой сервер, может быть до двух 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 сегментов, одно из решений состоит в том, чтобы добавить еще 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;
}
Но это действительно выглядит дрянным решением, и, учитывая, что ссылка также может выглядеть как example.com/somehash/landing/5/segment1/segment2/segment3/segment4/segment5
Это даже более неприятное решение, потому что при таком подходе будет около 12 локаций.
Сегменты, передаваемые прокси на другой сервер, будут выглядеть точно так же, как и с одним сегментом, поэтому с 5 сегментами это будет выглядеть примерно так @ tds / direct / 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;
}
Это будет прокси-запрос http://example.com/hash/a/b/c?a=1
к http://@tds/direct/hash/a/b/c?a=1
для любого URI.
Видеть http://nginx.org/r/proxy_pass
Если
proxy_pass
директива указывается с URI, затем, когда запрос передается на сервер, часть нормализованного URI запроса, соответствующая местоположению, заменяется URI, указанным в директиве
P.S. Нет необходимости использовать proxy_set_header
для $http_
переменные. По умолчанию они передаются. Также X-Real-IP
и X-Forwarded-For
избыточны.