Nginx 1.2.2: Jak sprawić, by try_files działał?

11

Niedawno zaktualizowałem nginx do wersji 1.2.2 i następujący wpis wydaje się być uszkodzony; przypuszczalnie zmiana składni między wersjami?

location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to index.html
                try_files $uri /index.html;
        }

Gdy przeglądam stronę http://www.mysite.com/a-non-existent-url , zostajesz przekierowany na stronę błędu „500 Internal Server Error”. Wprowadzono następujący wpis do dziennika;

2012/08/13 09:20:29 [error] 18457#0: *60 rewrite or internal redirection cycle 
while internally redirecting to "/index.html", client: 10.0.14.1, server: 
mysite.com, request: "GET /a-non-existent-url HTTP/1.1", host: "www.mysite.com"

Kiedyś działało to zgodnie z oczekiwaniami, nie mogę znaleźć poprawnej składni dla tej wersji. Jak powinno być teraz?

AKTUALIZACJA Pełna konfiguracja jako żądanie;

server {

    root /usr/share/nginx/mysite.com/public_html;
    index index.php index.html index.htm;
    server_name mysite.com www.mysite.com;
    access_log  /usr/share/nginx/mysite.com/logs/access_log;
    error_log   /usr/share/nginx/mysite.com/logs/error_log;

    location / {
        # First attempt to serve request as file, then
        # as directory, then fall back to index.html
        try_files $uri $uri/ /index.html;
    }

    #Added for awstats
    location ^~ /awstats-icon {
            alias /usr/share/awstats/icon/;
            access_log off;
    }

    #Added for awstats
    location ^~ /awstatscss {
            alias /usr/share/doc/awstats/examples/css/;
            access_log off;
    }

    #Added for awstats
    location ^~ /awstatsclasses {
            alias /usr/share/doc/awstats/examples/classes/;                                 
            access_log off;
    }

    #Added for awstats
    # Configure /cgi-bin/scripts to go through php-fastcgi
    location ~ ^/cgi-bin/.*\.(cgi|pl|py|rb) {
            gzip off;
            fastcgi_pass  127.0.0.1:9000;
            fastcgi_index cgi-bin.php;
            fastcgi_param SCRIPT_FILENAME    /etc/nginx/cgi-bin.php;
            fastcgi_param SCRIPT_NAME        /cgi-bin/cgi-bin.php;
            fastcgi_param X_SCRIPT_FILENAME  /usr/lib$fastcgi_script_name;
            fastcgi_param X_SCRIPT_NAME      $fastcgi_script_name;
            fastcgi_param QUERY_STRING       $query_string;
            fastcgi_param REQUEST_METHOD     $request_method;
            fastcgi_param CONTENT_TYPE       $content_type;
            fastcgi_param CONTENT_LENGTH     $content_length;
            fastcgi_param GATEWAY_INTERFACE  CGI/1.1;
            fastcgi_param SERVER_SOFTWARE    nginx;
            fastcgi_param REQUEST_URI        $request_uri;
            fastcgi_param DOCUMENT_URI       $document_uri;
            fastcgi_param DOCUMENT_ROOT      $document_root;
            fastcgi_param SERVER_PROTOCOL    $server_protocol;
            fastcgi_param REMOTE_ADDR        $remote_addr;
            fastcgi_param REMOTE_PORT        $remote_port;
            fastcgi_param SERVER_ADDR        $server_addr;
            fastcgi_param SERVER_PORT        $server_port;
            fastcgi_param SERVER_NAME        $server_name;
            fastcgi_param REMOTE_USER        $remote_user;
    }

    #Make sure all PHP is process by php-fpm
    location ~ \.php$ {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        include fastcgi_params;
    }

    #rTorrent/wTorrent needs this
    #To loop back to the xml rpc service
        location /RPC2 {
                scgi_pass   127.0.0.1:5000;
                include     scgi_params;
                scgi_param    SCRIPT_NAME  /RPC2;
        }

}

2. AKTUALIZACJA

Dziennik debugowania został opublikowany tutaj ( http://pastebin.com/raw.php?i=PtLwvQhW ). Jest dość długi, więc zrobiłem to, aby uniknąć spamowania tego postu.

jwbensley
źródło
Pokaż pełną konfigurację.
kwanty
1
Dołącz debugna końcu error_logwiersza, spróbuj ponownie i opublikuj dziennik błędów tutaj.
kwanty
W swoim poście dodałem link do pojemnika na wklej; pastebin.com/raw.php?i=PtLwvQhW
jwbensley
ls -l /usr/share/nginx/mysite.com/public_html/index.html?
kwanty

Odpowiedzi:

12

Zmodyfikuj wiersz try_files, aby:

try_files $uri $uri/ /index.html =404;

Ref: https://nginx.org/en/docs/http/ngx_http_core_module.html#try_files

Anoop P Alias
źródło
1
OK, kilka głupich punktów tutaj z mojej strony. Po pierwsze index.html nie istnieje i powinien to być index.php, który był pierwotnie, mam starą kopię konfiguracji pokazującą, że (właśnie uruchomienie diff zwróciło mi na to uwagę). Nie wiesz, jak to się zmieniło ?! Po drugie, wskazanie na /index.php faktycznie spowodowało, że moja przeglądarka pobrała surowy kod php, co jest trochę niebezpieczne, ale wskazuje na / działa po prostu świetnie. Więc linia jest teraz try_files $uri $uri/ / =404;
Wielkie
2
Dziękuję bardzo. Usunąłem /index.htmlkopalnię, nie wiedząc, że try_filespowoduje wewnętrzne przekierowanie do ostatniego elementu na liście, jeśli żaden nie pasuje. Opuściłem linię, try_files $uri $uri/ =404;która działa dobrze w moim przypadku.
Drew Noakes,