Redirecionamento no Nginx

2

Estou configurando um host virtual simples para emular algumas respostas específicas que, em produção, virão de um único URL. Por exemplo, o URL de produção pode ser assim:

http://domain.com/getdeviceinfo/info.bin

Na verdade, ele retorna o texto no formato .ini . Configurei vários arquivos de teste em minha webroot em /info/(legacy|new)/(daily|monthly)/device.htm , que testarão várias respostas diferentes e gostaria de configurar o redirecionamento para que eu possa redirecionar a mesma URL para o recurso apropriado. O URL de teste pode ser algo assim:

http://devdomain.com/devicename/legacy/monthly/getdeviceinfo/info.bin

O que eu gostaria de fazer é extrair os valores apropriados e servir (neste exemplo)

/info/legacy/monthly/devicename.htm

O que o Chrome, pelo menos, está fazendo é tentar fazer o download de algo chamado info.bin .

Aqui está o meu bloco location :

location ~ ^/(?<device>[^/]+)/(?<software>[^/]+)/(?<plan>[^/]+)/getdeviceinfo/info.bin$ {
  alias /opt/dev/hughesnet-modem-simulator/info/$software/$plan;
  try_files $uri $uri $device.htm
}

Eu também tentei definir o valor alias para /opt/dev/hughesnet-modem-simulator/info/$software/$device.htm em vez de try_files . Eu sei que acabei de mexer na sintaxe, mas não tenho certeza de onde eu errei.

Qualquer ideia seria muito apreciada.

Obrigado.

UPDATE

Meu bloco atual location :

location ~ ^/(?<device>[^/]+)/(?<software>[^/]+)/(?<plan>[^/]+)/getdeviceinfo/info.bin$ {
  types {}
  default_type text/plain;
  alias /opt/dev/project-root/info/$software/$plan/$device.htm;
}
    
por Rob Wilkerson 13.09.2012 / 17:59

2 respostas

1

.bin é mapeado por padrão para o tipo MIME application/octet-stream , e é por isso que o navegador tenta baixá-lo.

Para corrigir isso, substitua o mapeamento do tipo MIME no bloco location :

location /.... {
    types { }
    default_type text/plain;
    # the rest of your stuff
}
    
por 13.09.2012 / 18:40
1

A mistura de alias com variáveis com try_files é provavelmente a causa do seu problema. Em vez de usar alias, use root:

# Including the /s in the variables makes the try_files a little more efficient
location ~ ^(?<device>/[^/]+)(?<software>/[^/]+)(?<plan>/[^/]+)/getdeviceinfo/info.bin$ {
  # Set the root to the base of all the files
  root /opt/dev/hughesnet-modem-simulator/info;

  # construct the file path to append to the root
  try_files $software$plan$device.htm =404;
}
    
por 13.09.2012 / 18:33

Tags