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
.
Tags configuration nginx