Nginx 1.2.2: Comment faire fonctionner try_files?


11

J'ai récemment mis à jour nginx vers la version 1.2.2 et l'entrée suivante semble être cassée; vraisemblablement un changement de syntaxe entre les versions?

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

Lorsque je navigue vers http://www.mysite.com/a-non-existent-url, je suis redirigé vers la page d'erreur "500 Internal Server Error". L'entrée de journal suivante est effectuée;

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"

Cela fonctionnait comme prévu, je ne trouve pas la syntaxe correcte pour cette version. Comment cela devrait-il être maintenant?

UPDATE Full config as request;

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;
        }

}

2e MISE À JOUR

Un journal de débogage a été publié ici ( http://pastebin.com/raw.php?i=PtLwvQhW ). C'est assez long, j'ai donc fait cela pour éviter de spammer ce message.


Montrez votre configuration complète.
quanta

1
Ajoutez debugà la fin de la error_logligne, réessayez et publiez le journal des erreurs ici.
quanta

J'ai ajouté un lien vers une corbeille dans mon message; pastebin.com/raw.php?i=PtLwvQhW
jwbensley

ls -l /usr/share/nginx/mysite.com/public_html/index.html?
quanta

Réponses:


12

Modifiez la ligne try_files pour:

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

Réf: https://nginx.org/en/docs/http/ngx_http_core_module.html#try_files


1
OK quelques points stupides ici de ma part. Tout d'abord, index.html n'existe pas et cela devrait être index.php, ce qu'il était à l'origine, j'ai une ancienne copie de la configuration qui montre que (juste exécuter un diff me l'a signalé). Vous ne savez pas comment cela a changé?! Deuxièmement, pointer vers /index.php a en fait amené mon navigateur à télécharger le code php brut, ce qui est un peu dangereux, mais pointer vers / fonctionne très bien. Donc, la ligne est maintenant try_files $uri $uri/ / =404;Merci beaucoup: D
jwbensley

2
Merci beaucoup. J'avais supprimé le /index.htmlmien sans savoir que cela try_filesprovoque une redirection interne vers le dernier élément de la liste si aucun ne correspond. J'ai laissé la ligne try_files $uri $uri/ =404;qui fonctionne bien dans mon cas.
Drew Noakes du
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.