Servindo caminho remoto específico se o caminho remoto não existir via proxy_pass

1

Estou resolvendo isso há quase meio dia agora. : (

No Nginx em execução no meu laptop, onde não uso proxy_pass, os arquivos try estão funcionando bem. O aplicativo da Web JavaScript que eu escrevi faz o roteamento do cliente quando a página é carregada. No entanto, se a página da Web for atualizada, é o servidor que recebe a solicitação.

Eu tenho essa configuração no meu Nginx em execução no meu laptop

location /viewer {
  try_files $uri /viewer/index.html;
}

Com a configuração acima, se eu solicitei o link que não existe no meu sistema de arquivos, serei exibido com / viewer / index .html Está funcionando muito bem!

No entanto, temos uma configuração diferente no trabalho. Todas as nossas páginas de arquivos estáticos / html são armazenadas em um bucket S3 upstream.

Esta é a nossa configuração de trabalho

location /viewer {
  proxy_pass http://s3-bucket-server/viewer;
  add_header 'Access-Control-Allow-Credentials' 'true';
  add_header 'Access-Control-Allow-Origin' $cors_header;
  add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
  add_header 'Access-Control-Allow-Headers' 'DNT,Keep-Alive,User-Agent,Origin,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
}

A configuração acima funciona muito bem quando eu a acesso assim, http://internal-app.docs.svr/viewer . Eu posso clicar em nossa navegação à esquerda, que muda o caminho da localização no lado do cliente para gostar

http://internal-app.docs.svr/viewer/settings
http://internal-app.docs.svr/viewer/docs
http://internal-app.docs.svr/viewer/permissions
etc

No entanto, se digamos que eu estava em http://internal-app.docs.svr/viewer/permissions e cliquei no navegador, o que normalmente acontece é que ele faz uma chamada GET em / viewer / permissions em nosso servidor web internal-app.docs.svr. Infelizmente, não existe uma regra de localização nginx para lidar com isso.

O que eu gostaria de alcançar é que quando o cenário acima acontecer (a 404), tenha nginx serve /viewer/index.html. Eu não quero um redirecionamento desde que eu quero manter o último caminho que eu estava. Nesse caso, foi /viewer/permissions . O aplicativo de JavaScript que eu escrevi lidará com /viewer/permissions eventualmente.

    
por devwannabe 27.02.2017 / 07:35

1 resposta

0

Eu finalmente consegui trabalhar usando a configuração abaixo

error_page 404 @proxy;

então

location @proxy {
  rewrite ^ /viewer/index.html break;
  proxy_pass http://s3-bucket-server;
}
    
por 27.02.2017 / 08:05