Altere as regras de redirecionamento Nginx com base no tipo de solicitação de conteúdo

1

Estou tendo um servidor Nginx com proxy reverso. Eu só queria saber se é possível redirecionar a solicitação no Nginx com base no tipo de conteúdo da solicitação?

Neste momento, estou verificando o URL de uma palavra-chave e, com base nisso, redireciono a solicitação. Então é algo assim:

location ~*/(keyword){
     proxy_pass         http://127.0.0.1:6565;
}

Mas agora tenho outro URL com a mesma palavra-chave. No entanto, o tipo de conteúdo da solicitação será 'application/json' e eu preciso encaminhar essa solicitação para a porta 8080. É possível diferenciar entre essas duas URLs? Estou usando o Nginx 1.6.2.

Obrigado.

    
por drunkenfist 06.08.2015 / 02:12

1 resposta

0

Este é um problema confuso, porque o valor do cabeçalho Accept não é necessariamente uma única entrada, mas é uma lista de tipos de mídia, com valores de "qualidade", que precisam ser mapeados em relação ao recurso disponível representações para determinar qual tipo enviar de volta.

Existem may formas de hacking com if declarações e regex correspondente no conteúdo do cabeçalho Accept ( "If is Evil" não obstante, mas para fazê-lo de forma robusta, você quase certamente vai acabar tendo que escrever um módulo personalizado para fazer a correspondência (provavelmente contra um mapa). Existe um módulo de AcceptLanguage de terceiros que pode conter algum código útil para começar.

Editar com base na pergunta atualizada

Se tudo o que você deseja fazer é redirecionar com base no tipo de conteúdo do corpo da solicitação, a vida é muito mais fácil. Eu configurei um mapa dos tipos de conteúdo para o back-end e usei esse mapa para traduzir o $http_content_type variável no backend para enviar a solicitação para. Certifique-se de manusear (e testar!) Os casos "excepcionais", como "não enviou um tipo de conteúdo" e "enviou um tipo de conteúdo que não esperávamos".

    
por 06.08.2015 / 02:23

Tags