这个nginx错误“重写或内部redirect周期”是什么意思?

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" 

我从nginx错误日志中得到这些,我没有“kowol”子域,我没有任何链接到qq.com或joesfitness.net在我的网站上。 这是怎么回事?

编辑:Nginx的默认configuration:

 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; 

这里的问题是这里的第二个参数$uri/ ,会导致index指令中的每个文件依次被尝试。 如果没有find,它将转到/index.html ,这将导致重新input相同的location块,并且由于它仍然不存在,所以会得到一个无限循环。

我会重写这个:

  try_files $uri $uri/ =404; 

如果您在index指令中指定的索引文件都不存在,则返回404错误。


顺便说一句,你看到的这些请求是互联网背景噪音 。 尤其是,他们正在探索确定您的Web服务器是否为开放代理,并且在执行恶意活动时可能会被滥用以隐藏恶意用户的来源。 你的服务器不是这个configuration中的开放代理,所以你不需要担心。

这很烦人。 几个星期前就在工作,今天我试了一下就失败了。

我相信Ubuntu nginx包的升级会导致Ubuntu保持标准索引文件更改的默认目录,所以行:

 root /usr/share/nginx/www; 

由于这些文件的位置在/usr/share/nginx/html ,因此将不再工作。

要解决这个问题,可以将根指针改为正确的目录,或者创build一个符号链接到新目录:

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

为我工作。

如果你的index.php完全丢失,你也会得到这个错误信息。

我昨天遇到了这个问题,因为我正在通过代理服务器testingnginx,这个代理服务器caching了一个不再存在的redirect。 对我来说,解决scheme是$ sudo service squid3 restart squid3代理服务器,我通过连接。