Variáveis de configuração nginx personalizadas não sendo expandidas

4

Estou executando o nginx versão 1.2.8.

Parece que $log e $elog na configuração abaixo não são expandidos e, como resultado, nada é registrado. Esse é o problema e como posso fazer com que eles se expandam?

Configuração nginx:

server {
    listen              xx.xx.xx.xx:80 default;
    server_name         domain.com;
    set                 $docroot                /home/domain.com/public_html;
    set                 $log                    /home/domain.com/logs/access_log;
    set                 $elog                   /home/domain.com/logs/error_log;
    root                $docroot;
    error_log           $elog;
    include             /etc/nginx/http-backend.conf;

}
Configuração do

/etc/nginx/http-backend.conf:

.....
location ~* ^.+\.(jpg|jpeg|gif|png|svg|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|ico|swf|txt|tgz|tbz|pdfpls|torrent)$ {
    root                $docroot;
    try_files           $uri @fallback;
    access_log          $log            main;
    error_log           $elog;
    expires             30d;
    add_header          Pragma          "public";
    add_header          Cache-Control   "public";
#    error_page         404 = @fallback;
}
.....

UPD: Graças a Valery Viktorovsky , resolvi isso alterando as permissões para pastas de registros.

chown -R apache.root /home/*/logs/
chmod -R 750 /home/*/logs/

A solução alternativa mencionada, ligeiramente modificada, também foi aplicada. Não funciona sem ele, mesmo com permissões corretas. Os valores de $log e $elog permanecem inalterados, mas a barra é adicionada.

Atualizado a configuração de /etc/nginx/http-backend.conf:

.....
location ~* ^.+\.(jpg|jpeg|gif|png|svg|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|ico|swf|txt|tgz|tbz|pdfpls|torrent)$ {
    root                $docroot;
    try_files           $uri @fallback;
#    access_log          $log            main;
#    error_log           $elog;
    access_log          /$log            main;
    error_log           /$elog;
    expires             30d;
    add_header          Pragma          "public";
    add_header          Cache-Control   "public";
#    error_page         404 = @fallback;
}
.....

Ainda há um problema, porque o apache cria arquivos de log com a raiz do proprietário. Para resolver parcialmente isso, os mesmos comandos foram adicionados ao logrotate config:

/home/*/logs/*_log {
    missingok
    notifempty
    weekly
    minsize 50M
    compress
    rotate 60
    sharedscripts
    postrotate
        /sbin/service nginx reload > /dev/null 2>/dev/null || true
        /sbin/service httpd reload > /dev/null 2>/dev/null || true
        chown -R apache.root /home/*/logs/ > /dev/null 2>/dev/null || true
        chmod -R 750 /home/*/logs/ > /dev/null 2>/dev/null || true
    endscript
}
    
por mra4nii 17.05.2013 / 23:53

1 resposta

3

Os trabalhadores do nginx devem ter direitos para criar arquivos em /home/domain.com/logs

Portanto, verifique as permissões do diretório /home/domain.com/logs.

Além disso, você pode usar uma pequena solução alternativa:

server {
    set        $log                    'home/domain.com/logs/access_log';
    access_log  /$log;
}
    
por 18.05.2013 / 02:29

Tags