Sou muito novo no nginx (1 dia ou mais) e estamos usando isso como um proxy reverso para alguns aplicativos. Vamos adicionar outro aplicativo que processará um pequeno subconjunto de solicitações existentes. Estou tentando interceptar URLs que atingem a API cod / articles e contêm item.id nos argumentos e, em seguida, enviem essas solicitações e seus argumentos para esse novo aplicativo, que eu apontei agora porque não está pronto.
Gostaria de deixar todas as outras solicitações sozinhas, ou seja, a API não é "/ cod / acticles", a solicitação não contém item.id nos argumentos.
Exemplo de URL que deve ser enviado para o novo aplicativo.
http://server/mdata/transfer/CUSTOMER/cod/articles?filter={"item.id":"ID00000000123"......}&limit=50&fields=[]&sort=.......
Exemplos de URLs que não devem ser enviados.
http://server/mdata/transfer/customer/cod/articles?filter{"lang":"en_US","article.id":"123456"}&limit=50....
http://server/mdata/transfer/customer/cod/items?filter{"lang":"en_US","article.id":"123456"}&limit=50....
http://server/mdata/transfer/customer/doc/articles?filter{"lang":"en_US","article.id":"123456"}&limit=50....
Nota: .... significa apenas outros argumentos
Abaixo está minha configuração atual no Nginx. Parece fazer a "interceptação", mas há algumas coisas que parecem erradas para mim.
Em primeiro lugar, acredito que usar "se" não é ideal, e pode haver maneiras melhores de fazer isso. Mas eu não fui bem sucedido em combinar a seção de argumentos.
Em segundo lugar, os registros de acesso do nginx mostram três solicitações para um URL correspondente. x2 301 respostas e 1 200 respostas. Isso é esperado? Se assim for há uma maneira melhor de fazer isso para que haja apenas 1 pedido, pois parece que eu criei carga addtional para nginx.
#existing config for all /mdata/transfer/* APIs
location /mdata/transfer/ {
add_header Access-Control-Allow-Origin *;
allow all;
proxy_pass http://mds;
}
#static page which acts as a stub end point for testing.
location /proxyapp {
root /opt/www;
}
#new config where I try to intercept /mdata/transfer/customer/cod/articles API with item.id contained in the arguments.
location ~ /mdata/transfer/customer/cod/articles {
set $cst_proxy mds/mdata/transfer/customer/cod/articles;
if ($args ~ "item.id") {
set $cst_proxy localhost/proxyapp;
}
proxy_pass http://$cst_proxy$is_args$args;
proxy_redirect off;
}