115 votes

Que signifie cette erreur nginx "cycle de réécriture ou de redirection interne" ?

tail -f /var/log/nginx/error.log
2013/05/04 23:43:35 [error] 733#0: *3662 rewrite or internal redirection cycle while internally redirecting to "/index.html", client: 127.0.0.1, server: _, request: "GET /robots.txt HTTP/1.1", host: "kowol.mysite.net"
HTTP/1.1", host: "www.joesfitness.net"
2013/05/05 00:49:14 [error] 733#0: *3783 rewrite or internal redirection cycle while internally redirecting to "/index.html", client: 127.0.0.1, server: _, request: "GET / http://www.qq.com/ HTTP/1.1", host: "www.qq.com"
2013/05/05 03:12:33 [error] 733#0: *4232 rewrite or internal redirection cycle while internally redirecting to "/index.html", client: 127.0.0.1, server: _, request: "GET / HTTP/1.1", host: "joesfitness.net"

Je reçois ces messages dans le journal des erreurs de nginx, je n'ai pas de sous-domaine "kowol", je n'ai pas de liens vers qq.com ou joesfitness.net sur mon site. Que se passe-t-il ?

Editer : Nginx default config :

server {
    listen   8080; ## listen for ipv4; this line is default and implied
    listen   [::]:8080 default ipv6only=on; ## listen for ipv6

    root /usr/share/nginx/www;
    index index.php index.html index.htm;

    # Make site accessible from http://localhost/
    server_name _;

    location / {
        # First attempt to serve request as file, then
        # as directory, then fall back to index.html
        try_files $uri $uri/ /index.html;
        # Uncomment to enable naxsi on this location
        # include /etc/nginx/naxsi.rules
    }

    location /doc/ {
        alias /usr/share/doc/;
        autoindex on;
        allow 127.0.0.1;
        deny all;
    }

    # Only for nginx-naxsi : process denied requests
    #location /RequestDenied {
        # For example, return an error code
        #return 418;
    #}

    #error_page 404 /404.html;

    # redirect server error pages to the static page /50x.html
    #
    #error_page 500 502 503 504 /50x.html;
    #location = /50x.html {
    #   root /usr/share/nginx/www;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini

        # With php5-cgi alone:
        fastcgi_pass 127.0.0.1:9000;
        #With php5-fpm:
        #fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
    }

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #   deny all;
    #}
}

129voto

Michael Hampton Points 232226

C'est un cas étrange, mais je parie que le problème vient de.. :

        try_files $uri $uri/ /index.html;

Le problème ici est que le deuxième paramètre ici, $uri/ entraîne chacun des fichiers de votre index à essayer à tour de rôle. Si aucune n'est trouvée, il passe alors à /index.html ce qui provoque le même location pour être réintroduit, et comme il n'existe toujours pas, vous obtenez une boucle sans fin.

Je réécrirais ceci comme :

        try_files $uri $uri/ =404;

pour renvoyer une erreur 404 si aucun des fichiers d'index que vous avez spécifiés dans la section index existent.


BTW, ces demandes que vous voyez sont Bruit de fond de l'internet . Il s'agit en particulier de sondes permettant de déterminer si votre serveur web est un proxy ouvert. Elles peuvent être utilisées de manière abusive pour masquer l'origine d'un utilisateur malveillant lorsqu'il va exercer une activité malveillante. Votre serveur n'est pas un proxy ouvert dans cette configuration, vous n'avez donc pas vraiment à vous en préoccuper.

21voto

Brad Tutterow Points 5628

Vous obtiendrez également ce message d'erreur si votre index.php est totalement absent.

12voto

Wari Wahab Points 91

C'était ennuyeux. Ça marchait il y a quelques semaines, et ça a échoué quand j'ai essayé aujourd'hui.

Je croyais qu'une mise à jour d'Ubuntu nginx le répertoire par défaut où Ubuntu conservait les fichiers d'index standard a changé, donc la ligne :

root /usr/share/nginx/www;

Cela ne fonctionnera plus car l'emplacement des fichiers est à /usr/share/nginx/html .

Pour résoudre ce problème, il suffit de changer le pointeur de la racine vers le bon répertoire, ou de créer un lien symbolique vers le nouveau répertoire :

cd /usr/share/nginx
sudo ln -s html www

Ça marche pour moi.

5voto

3vi1 Points 424

J'ai eu cette erreur aujourd'hui, j'ai passé quelques heures à en trouver la cause. Il s'avère que quelqu'un a supprimé tous les fichiers du site.

3voto

Ninjaxor Points 399

J'ai rencontré ce problème hier parce que je testais nginx sur un serveur proxy qui avait mis en cache une redirection qui n'existait plus. La solution pour moi était de $ sudo service squid3 restart sur le serveur proxy squid3 par lequel je me connectais.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X