Crie um bloco de localização transparente para o usuário em nginx somente se o diretório existir

1

Eu tenho um diretório que às vezes existe e às vezes não. Se solicitado e existente, todos os arquivos devem estar disponíveis, por exemplo, assim

location /my_dir {
  root /other/www/root
}

Assim, se um usuário solicitar http://myhost.example.com/my_dir/file e /my_dir , ele deverá ser exibido. No entanto, se o diretório /other/www/root/my_dir não existir, nginx deverá agir como se o bloco de localização nunca tivesse sido definido e usasse as regras normais para manipular a solicitação. Especificamente, o cliente não deve estar ciente dessa regra especial se o diretório não existir atualmente, ou seja, não deve haver nenhum indicador visível para ele.

Uma ideia era colocar a configuração padrão em um local nomeado e alterar as linhas acima para o seguinte (cf. Como escrever um conf nginx (proxy reverso) modular DRY com locais nomeados ):

location /my_dir {
  root /other/www/root
  try_files $uri $uri/ @default;
}

location / {
  error_page 418 = @default;
  return 418;
}

location @default {
  # all default stuff like the default root, index etc. goes here
}

Isso faz sentido ou existe uma maneira melhor?

Atualizar

Aqui estão duas configurações de exemplo para o nginx:

# Example 1
server {
  listen 80;
  listen [::]:80;
  server_name www.example.com example.com
  root /var/www/www.example.com
  index index.html index.htm
}

# Example 2
server {
  listen 80;
  listen [::]:80;
  server_name www.example.com example.com
  return 301 https://$server_name/$request_uri
}

Em cada caso, gostaria de adicionar as regras especiais para o local /my_dir , mas apenas se o diretório raiz especial /other/www/root existir atualmente. Caso contrário, o cliente não deve notar o tratamento especial para a localização /my_dir .

    
por Michael Schlottke-Lakemper 01.01.2016 / 19:56

0 respostas