Nginx 1.2.2: Wie bringt man try_files zum Laufen?

11

Ich habe nginx kürzlich auf Version 1.2.2 aktualisiert und der folgende Eintrag scheint fehlerhaft zu sein. vermutlich eine Änderung der Syntax zwischen den Versionen?

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

Wenn ich zu http://www.mysite.com/a-non-existent-url navigiere, werde ich auf die Fehlerseite "500 Internal Server Error" weitergeleitet. Der folgende Protokolleintrag wird vorgenommen;

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"

Dies hat früher wie erwartet funktioniert. Ich kann die richtige Syntax für diese Version nicht finden. Wie soll das jetzt sein?

UPDATE Vollständige Konfiguration als Anfrage;

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. UPDATE

Hier wurde ein Debug-Protokoll veröffentlicht ( http://pastebin.com/raw.php?i=PtLwvQhW ). Es ist ziemlich lang, also habe ich dies getan, um zu vermeiden, dass dieser Beitrag gespammt wird.

jwbensley
quelle
Zeigen Sie Ihre vollständige Konfiguration.
Quanten
1
Fügen Sie debugdas Zeilenende error_loghinzu, versuchen Sie es erneut und veröffentlichen Sie das Fehlerprotokoll hier.
Quanten
Ich habe in meinem Beitrag einen Link zu einem Einfügebehälter hinzugefügt. pastebin.com/raw.php?i=PtLwvQhW
jwbensley
ls -l /usr/share/nginx/mysite.com/public_html/index.html?
Quanten

Antworten:

12

Ändern Sie die Zeile try_files in:

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

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

Anoop P Alias
quelle
1
OK, ein paar dumme Punkte hier von meiner Seite. Erstens existiert index.html nicht und das sollte index.php sein, was es ursprünglich war. Ich habe eine alte Kopie der Konfiguration, die das zeigt (nur das Ausführen eines Diff hat mich darauf hingewiesen). Nicht sicher, wie sich das geändert hat?! Zweitens hat das Zeigen auf /index.php dazu geführt, dass mein Browser den rohen PHP-Code heruntergeladen hat, was ein wenig gefährlich ist, aber auf / verweist, funktioniert einfach großartig. Also die Leitung ist jetzt try_files $uri $uri/ / =404;Vielen Dank: D
jwbensley
2
Vielen Dank. Ich habe das /index.htmlaus meinem entfernt, ohne zu wissen, try_filesdass eine interne Umleitung zum letzten Element in der Liste erfolgt, wenn keines übereinstimmt. Ich habe die Zeile verlassen, try_files $uri $uri/ =404;die in meinem Fall gut funktioniert.
Drew Noakes