76 votos

¿Qué significa este error de nginx "ciclo de reescritura o redireccionamiento interno"?

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"

Estoy recibiendo esto del registro de errores de nginx, no tengo un sub-dominio "kowol", no tengo ningún enlace a qq.com o joesfitness.net en mi sitio. ¿Qué es lo que está pasando?

Editar: Configuración predeterminada de Nginx:

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

89voto

Michael Hampton Puntos 88271

Es muy extraño, aunque apuesto a que el problema es con..:

        try_files $uri $uri/ /index.html;

El problema aquí es que el segundo parámetro aquí, $uri/ causa que cada uno de los archivos de tu index directiva para ser juzgada a su vez. Si no se encuentra ninguna, entonces pasa a /index.html que causa la misma location bloque para ser reingresado, y como todavía no existe, tienes un bucle sin fin.

Yo reescribiría esto como:

        try_files $uri $uri/ =404;

para devolver un error 404 si ninguno de los archivos de índice que especificó en el index existen directivas.


Por cierto, esas peticiones que están viendo son Ruido de fondo de Internet . En particular, son sondas para determinar si su servidor web es un proxy abierto y puede ser abusado para ocultar el origen de un usuario malicioso cuando va a realizar una actividad maliciosa. Su servidor no es un proxy abierto en esta configuración, así que no tiene que preocuparse por ello.

9voto

wari Puntos 1

Esto fue molesto. Funcionaba hace unas semanas, y me falló cuando lo intenté hoy.

Creía que una actualización de Ubuntu nginx causa que el directorio por defecto de donde Ubuntu guardaba los archivos de índice estándar cambie, por lo que la línea:

root /usr/share/nginx/www;

No funcionará más ya que la ubicación de los archivos está en /usr/share/nginx/html .

Para solucionarlo, uno puede cambiar el puntero root al directorio correcto, o crear un enlace simbólico al nuevo directorio:

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

Funciona para mí.

3voto

Ninjaxor Puntos 9

Me encontré con este problema ayer porque estaba probando a nginx sobre un servidor proxy que había almacenado una redirección que ya no existía. La solución para mí fue $ sudo service squid3 restart en el servidor proxy squid3 por el que me estaba conectando.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: