Dziennik błędów Nginx nie działa

3

Próbowałem wielu rzeczy, ale nie mogłem sprawić, aby dziennik błędów działał, jednak dziennik dostępu działa poprawnie.

wspomniane tutaj rozwiązanie nie działało dla mnie:

http://mailman.nginx.org/pipermail/nginx/2009-Luty/009567.html (próbowano wpisać błąd jako wózek z logiem błędów - brak szczęścia)

http://forum.nginx.org/read.php?2,58447,58447 (nie ma przestarzałego procesu po zatrzymaniu nginx)

Oto informacje o wirtualnym hoście:

server {
        server_name .qa.domain.ca;
        root /var/www/qa.domain.ca;
        access_log /var/log/nginx/qa.domain.ca/access.log;
        error_log /var/log/nginx/qa.domain.ca/error.log;
        index index.html index.htm index.php;

        # redirect to non-www
        if ($host ~* ^www\.(.*)){
                set $host_without_www $1;
                rewrite ^/(.*)$ $scheme://$host_without_www/$1 permanent;
        }

    if (-d $request_filename){
                rewrite ^/(.*[^/])$ /$1/ permanent;
        }
        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to index.html
                try_files $uri $uri/ /index.php;
                # Uncomment to enable naxsi on this location
                # include /etc/nginx/naxsi.rules
        }
        location ~ .php$ {
                if (!-f $request_filename) {
                        return 404;
                }
                fastcgi_pass   127.0.0.1:9000;
                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME  /var/www$fastcgi_script_name;
                include fastcgi_params;
        }
}

źródło
1
Kiedy mówisz, że to nie działa, masz na myśli, że plik nie istnieje lub jest pusty? Jaka wersja nginx?
Plik jest pusty. Jednak kiedy usuwam plik error.log, nginx tworzy nowy, ale zawsze jest pusty, nawet gdy pojawia się błąd 500 z powodu skryptu php. Dzięki :)

Odpowiedzi:

3

Twoja konfiguracja, prawdopodobnie oparta na jednym z wielu przestarzałych postów na blogu na wolności, jest nieefektywna.

Oto lepsza konfiguracja:

server {
    server_name www.qa.domain.ca;
    # redirect to non-www
    return 301 http://qa.domain.ca$request_uri;      
}

server {
    server_name qa.domain.ca;
    root /var/www/qa.domain.ca;
    access_log /var/log/nginx/qa.domain.ca/access.log;
    error_log /var/log/nginx/qa.domain.ca/error.log;
    index index.html index.htm index.php;

    # Using "if" for redirection is inefficient as every request will be tested
    # Also, the "-d" test is redundant given the use of "try_files" below

    location / {
        # First attempt to serve request as file, then
        # as directory, then fall back to index.html
        try_files $uri $uri/ /index.php;
        # Uncomment to enable naxsi on this location
        # include /etc/nginx/naxsi.rules
    }
    location ~ .php$ {
        # This "if" block will work as long as every php file physically exists
        # and you don't use a php app that uses rewriting of pseudo files
        # I personally prefer to use "location ~ \..*/.*\.php$ { return 400; }"
        if (!-f $request_filename) {
            return 404;
        }
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /var/www$fastcgi_script_name;
        include fastcgi_params;
    }
}

Jeśli chodzi o zapytanie error_log, nie ma powodu, dla którego nie powinien on działać z żadnej z konfiguracji.

**** EDIT **** Wydaje się, że może istnieć powód, dla którego rejestrowanie może nie działać: https://bugs.php.net/bug.php?id=61045

Dayo
źródło
Cześć Dayo: wersja nginx: nginx / 1.1.19 i próbowałem pracować z powyższą konfiguracją, ale bez powodzenia. Plik dziennika błędów jest nadal pusty. Moje przypadki testowe do tworzenia błędów to umieszczanie kodu „rzucaj nowy wyjątek ()” w skrypcie php i pisanie niepoprawnego kodu php, aby spowodować błąd 500. Dzięki.
Zobacz link do błędu PHP w odpowiedzi. Czy używasz PHP-FPM?
Dayo
1

Oprócz aktualizacji PHP do najnowszej wersji, która powinna mieć naprawę napotkanego błędu , możesz również wygenerować własne dzienniki błędów. Na przykład mam system, w którym PHP loguje się do syslog. Możesz to kontrolować za pomocą error_logdyrektywy w php.ini.

Michael Hampton
źródło