O proxy reverso insensível a maiúsculas Nginx reescreve

1

Eu estou olhando para configurar um proxy reverso nginx para fazer alguns próximos movimentos do servidor e carregar implementações balanceadas muito mais fácil dentro de nossos aplicativos. Como os nossos servidores são todos, a sensibilidade a maiúsculas e minúsculas do IIS não tem sido um problema, mas agora, com o nginx, está se tornando um para mim. Eu estou simplesmente procurando fazer uma reescrita, independentemente do caso.

Notas de infraestrutura:

  • Todos os servidores de back-end são IIS
  • A maioria dos serviços são serviços WCF
  • Estou tentando simplificar as URLs para que eu possa migrar os serviços enquanto continuamos a desenvolver

Não consigo definir minha localização para diferenciar maiúsculas devido ao seguinte erro:

nginx: [emerg] "proxy_pass" cannot have URI part in location given by regular expression, or inside named location, or inside "if" statement, or inside "limit_except" block in /etc/nginx/sites-enabled/test.conf:101

A parte principal do meu arquivo conf em que estou tentando lidar com a reescrita é a seguinte

location /svc_test {
    proxy_set_header x-real-ip              $remote_addr;
    proxy_set_header x-forwarded-for        $proxy_add_x_forwarded_for;
    proxy_set_header host                   $http_host;

    proxy_pass  http://backend/serviceSite/WFCService.svc;
}

location ~* /test {
    rewrite ^/(.*)/$ /svc_test/$1 last;
}

É o local / teste que não consigo descobrir. Se eu chamar http://nginxserver/svc_test/help , recebo a página de ajuda do WCF para exibir corretamente e posso fazer todas as chamadas REST disponíveis. Isso tem de ser uma questão de regex tosca da minha parte, mas eu tentei várias variações e tudo o que posso obter são erros 404 ou 500 do nginx. Isso não é ciência de foguetes, então alguém pode me apontar na direção certa para que eu possa parecer um idiota e seguir em frente?

    
por BrianM 09.11.2012 / 22:44

1 resposta

1

O regex correto final que me levou onde eu queria ir é

rewrite ^/([^/]*)(.*)$ /svc_test$2;

e isso teve os seguintes resultados:

  • / test - > Página de informações do serviço WCF
  • / test / - > erro (correto)
  • / test / help - > Página de ajuda do ponto de extremidade do serviço WCF
  • / test / contacts / 1 - > Puxado da interface de contato get
  • / test / contacts - > Puxou a lista de contatos completa

Eu estou (obviamente) longe de ser um cara de regex fluente, então isso pode não ser a maneira ideal de lidar com a reescrita insensível a maiúsculas e minúsculas, mas faz tudo o que eu estava procurando realizar. A única coisa que gostaria de adicionar em algum momento é reescrever / testar / testar / para evitar qualquer página de erro, mas isso não afetará as chamadas de serviço.

    
por 11.11.2012 / 00:31