Configuração
- Configuração
Locations

try_files
O diretiva try_files no NGINX é usada para verificar a existência de arquivos em uma ordem especificada e, em seguida, processar a solicitação de acordo com o resultado. Se nenhum dos arquivos especificados for encontrado, a solicitação é passada para a localização de fallback (frequentemente uma página de erro 404 ou outra localização).
Aqui está um exemplo básico de como funciona o try_files em uma configuração NGINX:
server {
listen 80;
server_name exemplo.com;
root /var/www/html;
location / {
try_files $uri $uri/ /index.html;
}
}
Neste exemplo:
$urirefere-se ao arquivo solicitado.$uri/verifica se o URI solicitado é um diretório./index.htmlé o arquivo de fallback se nenhum dos anteriores for encontrado.
Explicação detalhada:
listen 80;: Este comando faz com que o servidor NGINX escute na porta 80.server_name exemplo.com;: Define o nome do servidor paraexemplo.com.root /var/www/html;: Define o diretório raiz onde os arquivos do site estão localizados.location / { ... }: Define a localização padrão para a raiz do site.try_files $uri $uri/ /index.html;: Esta linha instrui o NGINX a tentar servir o arquivo solicitado pelo URI. Se o arquivo não for encontrado, ele tentará o URI como um diretório. Se isso também não for encontrado, ele usará/index.htmlcomo fallback.
Essa configuração é especialmente útil em aplicativos de página única (SPA), onde todas as solicitações devem ser redirecionadas para index.html, permitindo que o roteamento seja gerenciado pelo lado do cliente (JavaScript).
$is_args
O diretiva try_files no NGINX é usada para verificar a existência de arquivos em uma ordem especificada e, em seguida, processar a solicitação de acordo com o resultado. Se nenhum dos arquivos especificados for encontrado, a solicitação é passada para a localização de fallback (frequentemente uma página de erro 404 ou outra localização).
Aqui está um exemplo básico de como funciona o try_files em uma configuração NGINX:
server {
listen 80;
server_name exemplo.com;
root /var/www/html;
location / {
try_files $uri $uri/ /index.html;
}
}
Neste exemplo:
$urirefere-se ao arquivo solicitado.$uri/verifica se o URI solicitado é um diretório./index.htmlé o arquivo de fallback se nenhum dos anteriores for encontrado.
Explicação detalhada:
listen 80;: Este comando faz com que o servidor NGINX escute na porta 80.server_name exemplo.com;: Define o nome do servidor paraexemplo.com.root /var/www/html;: Define o diretório raiz onde os arquivos do site estão localizados.location / { ... }: Define a localização padrão para a raiz do site.try_files $uri $uri/ /index.html;: Esta linha instrui o NGINX a tentar servir o arquivo solicitado pelo URI. Se o arquivo não for encontrado, ele tentará o URI como um diretório. Se isso também não for encontrado, ele usará/index.htmlcomo fallback.
Essa configuração é especialmente útil em aplicativos de página única (SPA), onde todas as solicitações devem ser redirecionadas para index.html, permitindo que o roteamento seja gerenciado pelo lado do cliente (JavaScript).
root
server {
listen 8089 default_server;
location / {
root /home/user/meu_site;
index index.html;
}
}
- Diretiva root:
- Define o diretório raiz para esta localização específica.
- root
/home/user/meu_site;indica que os arquivos para esta localização serão servidos a partir do diretório/home/user/meu_site.
Explicando como o NGINX interpreta o root
Vamos analisar o porquê de uma configuração funcionar e a outra não.
Análise da Configuração que Não Funciona
location /index-teste {
root /home/site_exemplo;
index index.html;
}
Análise da Configuração que Funciona
location / {
root /home/site_exemplo;
index index.html;
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
# try_files $uri $uri/ =404;
}
Problema e Solução
- Entendimento da Diretiva
rootelocation:
A diretiva root define o diretório base a partir do qual os arquivos serão servidos. No entanto, a forma como a URL é mapeada para o sistema de arquivos depende do caminho especificado no location.
-
Na configuração
location /index-teste, se um cliente solicitarhttp://servidor/index-teste, o Nginx vai procurar por/home/site_exemplo/index-teste/index.html, porque a diretivarootsubstitui a parte inicial da URL com o caminho especificado emroot. -
Na configuração
location /, se um cliente solicitarhttp://servidor/, o Nginx vai procurar por/home/site_exemplo/index.html, que é o comportamento desejado.
- Uso da Diretiva
try_files:
A diretiva try_files é extremamente útil para garantir que o servidor tente servir a URL requisitada como um arquivo ou diretório, e caso não encontre, retorne um erro 404.
try_files $uri $uri/ =404;tenta primeiro servir o arquivo solicitado diretamente ($uri), depois como um diretório ($uri/), e se nenhum desses funcionar, retorna um erro 404.
Como Fazer a Configuração com location /index-teste Funcionar
Para que a configuração location /index-teste funcione como esperado, você precisa garantir que a URL /index-teste seja mapeada corretamente para o diretório base e arquivo desejado.
location /index-teste {
alias /home/site_exemplo;
index index.html;
}
Diferença entre root e alias
-
root: Substitui a URL a partir dolocationcom o caminho especificado. Exemplo:location /index-teste {
root /home/site_exemplo;
index index.html;
}Solicitação a
http://servidor/index-testeprocura/home/site_exemplo/index-teste/index.html. -
alias: Mapeia diretamente o caminho especificado nolocationpara o caminho do sistema de arquivos. Exemplo:location /index-teste {
alias /home/site_exemplo;
index index.html;
}Solicitação a
http://servidor/index-testeprocura/home/site_exemplo/index.html.
Conclusão
A configuração location /index-teste não funciona com root devido à forma como o caminho é mapeado para o sistema de arquivos. Usar alias em vez de root resolve esse problema, mapeando corretamente a URL para o diretório desejado.
Logs
A configuração fornecida para o access_log no servidor Nginx tem os seguintes parâmetros:
path: Este é o caminho onde o arquivo de log de acesso será armazenado. Pode ser um caminho absoluto como/var/log/nginx/access.logou relativo.combined: Este é o formato de log que será usado. O formatocombinedé um formato de log pré-definido que inclui informações detalhadas sobre cada solicitação, como endereço IP do cliente, timestamp, método HTTP, URI, código de status, tamanho da resposta, referer, e user-agent.buffer=256k: Este parâmetro define o tamanho do buffer de memória para os logs de acesso. Quando o buffer atinge o tamanho de 256 kilobytes, os dados são gravados no arquivo de log.flush=60m: Este parâmetro define o intervalo máximo de tempo em que os dados no buffer serão gravados no arquivo de log, mesmo que o tamanho do buffer não tenha sido atingido. Neste caso, o buffer será esvaziado a cada 60 minutos.
Em resumo:
A configuração access_log path combined buffer=256k flush=60m significa que os logs de acesso serão armazenados no caminho especificado (path) no formato combined, utilizando um buffer de 256 kilobytes para armazenar os logs na memória. Esse buffer será esvaziado e os dados serão gravados no arquivo de log a cada 60 minutos ou quando o buffer atingir 256 kilobytes, o que ocorrer primeiro.
server {
listen 80;
server_name exemplo.com;
access_log /var/log/nginx/access.log combined buffer=256k flush=60m;
access_log off; # desativa os logs
location / {
root /var/www/exemplo;
index index.html index.htm;
}
}