Resposta curta : veja o último local na versão longa. Tecnicamente, a configuração descrita nessa página está errada. Veja o final da resposta por razões.
Resposta longa : você tem /etc/nginx...
path em seus logs porque os pedidos de arquivos estáticos não correspondem à sua localização estática (o local regex leva precedente ) e você não especificou root
para o bloco server
em si.
Quando a sua solicitação corresponder à localização da regex, o nginx pesquisará os arquivos em /etc/nginx
. Para corrigir isso, você pode querer adicionar a diretiva root
diretamente dentro do bloco server
, conforme descrito acima, ou sob cada localização não-proxy (o mesmo vale para o fastCGI também).
Também detectado: se você especificar root
directive na localização, nginx pesquisará arquivos em $document_root/$location
, por exemplo, em /srv/static/static
, que é 99% não, você pode querer. Você pode usar a diretiva alias
, mas a documentação do nginx prefere redefinir a diretiva root
se isso for possível:
location /static {
root /srv;
}
A diretiva alias
funciona exatamente como você esperava, então você pode querer escrever isso:
location /static {
alias /srv/static;
}
Quanto ao local da regex, você pode querer colocá-lo em /static
location. Além disso, como haverá apenas arquivos estáticos, você poderá se livrar da localização do regex e a localização final ficará assim:
location /static {
root /srv;
access_log off;
expires 30d;
}
Por que a configuração descrita está errada e como corrigir isso
De acordo com os comandos que o usuário forneceu, ele gosta de ter a maioria dos componentes o mais nova possível rodando em um Linux parecido com o Debian. Mas ao invés de instalar tudo corretamente manualmente ou apenas usando o aptitude, ele começa a mixar e instalar softwares de pacotes também. Isso funcionará para alguma caixa de desenvolvimento, mas isso não é permitido para nenhuma produção. Então, aqui estão alguns pontos:
- Por favor, instale o software de uma maneira, preferencialmente dos pacotes. Se você precisar de uma versão de ponta, construa pacotes para eles (isso não é tão difícil;)) ou use algum ambiente para separá-los do sistema como
virtualenv
. - Você não precisa adicionar manualmente o usuário e o grupo nginx. Servidores Web são executados a partir de
www-data:www-data
no Debian. Como sua configuração não pretende executar nenhum código dentro do contexto do servidor da web, adicionar mais usuários é inútil. - O artigo sugere para redefinir todo o arquivo
/etc/nginx/nginx.conf
, o que é totalmente errado, especialmente em sistemas parecidos com o Debian. Em vez de fazer isso, você pode querer criar o arquivosample_project
em/etc/nginx/sites-available
e vinculá-lo a/etc/nginx/sites-enabled
para fazer o nginx anexar sua configuração ':# cd /etc/nginx/sites-enabled && ln -s ../sites-available/sample_project sample_project
- O arquivo
sample_project
, nesse caso, deve conter apenas o blocoserver
, nada mais. - A maioria das diretivas (exceto
log_format
e talvez algumas outras) deve ter contexto de seu virtualhost e, portanto, deve ser colocada emserver
block no arquivosample_project
. Você não afetará o trabalho de outros serviços em execução neste servidor web. Você pode colocar a diretivalog_format
em seu arquivo, mas fora de qualquer bloco e antes do próprio blocoserver
. - Em vez de escrever todas as diretivas
fastcgi_pass
, deve-se escreverinclude fastcgi_params
e apenas redefinir as que não estão corretas para a configuração atual. - Para que seus arquivos de log sejam rotacionados automaticamente por logrotate, você deve nomeá-los para corresponder a
*access.log
ou*error.log
curinga.
Se o arquivo de configuração do host funcional mínimo for /etc/nginx/sites-available/sample_project
, poderá parecer:
server {
listen 80;
server_name myhostname.com;
root /home/user/django/sample_project;
location /static {
root /srv;
access_log off;
expires 30d;
}
location / {
include fastcgi_params;
fastcgi_pass 127.0.0.1:8080;
}
access_log /var/log/nginx/sample_project.access.log combined;
error_log /var/log/nginx/sample_project.error.log warn;
}