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"
Los obtengo del registro de errores nginx, no tengo un subdominio "kowol", no tengo enlaces a qq.com o joesfitness.net en mi sitio. ¿Que esta 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;
#}
}
try_files $uri $uri/ /index.html;
yindex index.php index.html index.htm;
establece. resultando en el error en la pregunta. No es así para 12.04 y 14.04, por lo que es menos probable que suceda en un servidor.También recibirá este mensaje de error si
index.php
falta por completo.fuente
Esto fue molesto. Estaba funcionando hace unas semanas, y me falló cuando lo intenté hoy.
Creí que una actualización del
nginx
paquete de Ubuntu causaba que el directorio predeterminado donde Ubuntu guardaba los archivos de índice estándar cambiara, por lo que la línea:Ya no funcionará ya que la ubicación de los archivos está en
/usr/share/nginx/html
.Para solucionarlo, se puede cambiar el puntero raíz al directorio correcto o crear un enlace simbólico al nuevo directorio:
Funciona para mi.
fuente
Ayer me encontré con este problema porque estaba probando nginx en un servidor proxy que había almacenado en caché una redirección que ya no existía. La solución para mí fue
$ sudo service squid3 restart
en el servidor proxy squid3 al que me estaba conectando.fuente
Tuve este error hoy, pase unas horas averiguando la causa. Resultó que alguien eliminó todos los archivos del sitio.
fuente
Solo para agregar otro caso cuando esto suceda. Como en la respuesta aceptada, en general, esto sucede cuando se prueba una secuencia de ubicaciones y luego se crea una especie de bucle de redireccionamiento interno (interminable).
A veces se manifiesta con una mala configuración de NGINX, e incluso con chmod restrictivo (en algunas configuraciones de bloqueo). Aquí hay un ejemplo.
Suponga que tiene un
index.php
controlador frontal, como de costumbre:Principalmente sirve URL de SEO como a
/some/thing
través de suindex.php
.Pero, como de costumbre, hay algunos archivos PHP que debe exponer directamente (por lo tanto, el
location ~\.php
y no)location = /index.php
.Suponga también que
index.php
sechmod
transfirió a 0400 para el bloqueo de seguridad.Todo sigue funcionando bien en este caso, siempre y cuando el archivo sea propiedad del "usuario PHP-FPM". NGINX no necesita leer el archivo, ya que simplemente pasa su nombre de archivo a PHP-FPM para su ejecución y recupera la respuesta FastCGI.
Entonces desea manejar un caso de lo que sucede cuando alguien visita
/non-existent.php
porque con esta configuración bastante estándar obtendríaNo input file specified.
para ese caso.Para lidiar con esto, algunas personas agregan:
Bueno, por supuesto,
if
es malvado según nginx, pero no se trata de eso. Ahora todo se romperá con el error del ciclo de redireccionamiento. ¿Por qué?Debido a que esta secuencia ocurre en un bucle:
/some/page
se solicita la URL, ingresa nginxlocation /
, no encuentra un archivo real y lo convierte en/index.php
.php
al bloque de ubicación e intenta verificar si puede leerindex.php
. Como no puede , lo reescribe de la misma manera yindex.php
luego vuelve a hacerlo.php
.fuente