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"
Estou recebendo isso do log de erros do nginx, não tenho um subdomínio "kowol", não tenho links para qq.com ou joesfitness.net no meu site. O que está acontecendo?
Editar: configuração padrão do 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;
#}
}
É estranho, tudo bem, embora eu aposto que o problema é com:
O problema aqui é que o segundo parâmetro aqui,
$uri/
, faz com que cada um dos arquivos em suaindex
diretiva seja testado por vez. Se nenhum for encontrado, ele passa para/index.html
, o que faz com que o mesmolocation
bloco seja reinserido e, como ainda não existe, você obtém um loop infinito.Eu reescreveria isso como:
para retornar um erro 404 se nenhum dos arquivos de índice especificados na
index
diretiva existir.BTW, essas solicitações que você está vendo são ruído de fundo da Internet . Em particular, são sondas para determinar se o seu servidor web é um proxy aberto e pode ser abusado para ocultar a origem de um usuário mal-intencionado quando ele for realizar uma atividade maliciosa. Seu servidor não é um proxy aberto nesta configuração, então você não precisa se preocupar com isso.
Você também receberá esta mensagem de erro se o seu
index.php
estiver totalmente ausente.Isso era irritante. Estava funcionando há algumas semanas e falhou comigo quando tentei hoje.
Eu acreditava que uma atualização do
nginx
pacote Ubuntu causaria o diretório padrão de onde o Ubuntu mantinha os arquivos de índice padrão alterados, então a linha:Não funcionará mais, pois a localização dos arquivos está em
/usr/share/nginx/html
.Para corrigir, basta alterar o ponteiro raiz para o diretório correto ou criar um link simbólico para o novo diretório:
Funciona para mim.
Teve esse erro hoje, gaste algumas horas descobrindo a causa. Acontece que alguém apagou todos os arquivos do site.
Eu me deparei com esse problema ontem porque estava testando o nginx em um servidor proxy que havia armazenado em cache um redirecionamento que não existia mais. A solução para mim foi
$ sudo service squid3 restart
no servidor proxy squid3 pelo qual eu estava me conectando.Apenas para adicionar outro caso quando isso acontecer. Como na resposta aceita, em geral, isso acontece quando uma sequência de locais sendo tentada e, em seguida, é criada uma espécie de loop de redirecionamento interno (sem fim).
Às vezes, manifesta-se com uma configuração NGINX ruim e até mesmo com chmod restritivo (em algumas configurações de bloqueio). Aqui está o exemplo.
Suponha que você tenha um
index.php
front controller, como de costume:Você serve principalmente URLs de SEO como
/some/thing
por meio do seu arquivoindex.php
.Mas, como de costume, existem alguns arquivos PHP que você precisa expor diretamente (portanto, os arquivos
location ~\.php
e nãolocation = /index.php
.Suponha também que seu
index.php
-dedchmod
para 0400 para bloqueio de segurança.Tudo ainda funciona bem neste caso, desde que o arquivo seja de propriedade do "usuário do PHP-FPM". O NGINX não precisa ler o arquivo, porque ele simplesmente passa seu nome de arquivo para PHP-FPM para execução e recebe de volta a resposta FastCGI.
Então você quer lidar com um caso do que acontece quando alguém visita
/non-existent.php
porque com essa configuração bastante padrão você obteriaNo input file specified.
para esse caso.Para lidar com isso, algumas pessoas acrescentam:
Bem, é claro que
if
é mal por nginx, mas não é sobre isso. Tudo agora será interrompido com o erro do ciclo de redirecionamento. Por quê?Porque esta sequência acontece em um loop:
/some/page
URL é solicitado, o nginx inserelocation /
, não encontra um arquivo real e o transforma em/index.php
.php
bloco de localização e tenta verificar se pode lerindex.php
. Como não pode , ele o reescreve para o mesmoindex.php
e retorna.php
novamente.você pode tentar remover o index.html da sintaxe "try_files" do default.conf:
com isso:
o que eu percebo que o nginx está tentando resolver index.html por index.php mas nesta linha ele volta para index.html e continua no ciclo