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默认配置:

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


#1 楼

这是一个奇怪的问题,尽管我敢打赌问题出在哪里:

        try_files $uri $uri/ /index.html;


这里的问题是这里的第二个参数$uri/导致每个index指令中的文件中的一部分将依次尝试。如果未找到,则将其移至/index.html,这将导致重新输入相同的location块,并且由于该块仍然不存在,您将得到一个无限循环。

我将重写如下所示:

        try_files $uri $uri/ =404;


,如果在index指令中指定的索引文件都不存在,则返回404错误。 >顺便说一句,您看到的那些请求是Internet背景噪音。尤其是,它们是确定您的Web服务器是否为开放代理服务器的探针,当用户执行恶意活动时可以被滥用以隐藏恶意用户的来源。在这种配置下,您的服务器不是开放式代理,因此您不必担心。

评论


感谢您的解释。有什么办法可以阻止/禁止这种探测?

– pavs-maha
13年5月5日在5:28

并不是完全正确,只要给他们提供一个不错的404,他们最终就会弄清楚。

–迈克尔·汉普顿
13年5月5日下午5:29

“有趣”是ubuntu 13.10上的默认配置具有try_files $ uri $ uri / /index.html;和index index.php index.html index.htm;组。导致问题中的错误。 12.04和14.04并非如此,因此在服务器上发生的可能性较小。

–leifcr
2014年4月3日在8:54



我的问题是我正在运行Laravel(带有vue-router),所以我需要将/index.html更改为/index.php

–最大
19/12/17在8:06

#2 楼

如果您的index.php完全丢失,您还将收到此错误消息。

评论


是的,在我的情况下,我把路径放在根参数上犯了一个错误。

– dlopezgonzalez
16-4-3在14:41

在我的情况下index.html

– Beau Barker
20 Apr 30'14:36

#3 楼

真烦人它在几周前就可以使用了,今天尝试时对我却失败了。行:

root /usr/share/nginx/www;


由于文件的位置在nginx上,将不再起作用。要修复,只需更改指向正确目录的根指针,或创建到新目录的符号链接:

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


对我有用。

#4 楼

我昨天遇到了这个问题,因为我正在通过代理服务器测试nginx,该代理服务器缓存了不再存在的重定向。对我来说,解决方案是通过我连接的squid3代理服务器上的$ sudo service squid3 restart

评论


请注意,我本着良好的意愿分享了这个答案。出现此错误的原因多种多样,需要花费一些时间才能找出代理缓存的原因。

– Ninjaxor
2015年5月1日18:40



#5 楼

今天有此错误,请花几个小时弄清楚原因。原来有人删除了该网站的所有文件。

#6 楼

只是在发生这种情况时添加另一种情况。就像在已接受的答案中一样,通常会在尝试一系列位置然后创建内部重定向循环(永无止境)时发生。即使使用限制性chmod(在某些锁定配置中)。以下是示例。

假设您像往常一样具有index.php前控制器: /some/thing

但是,像往常一样,您需要直接公开一些PHP文件(因此index.php而不是location ~\.php。设置为0400以进行安全锁定

在这种情况下,只要文件由“ PHP-FPM用户”拥有,一切仍然可以正常使用。NGINX不需要读取文件,因为它可以只需将其文件名传递给PHP-FPM即可执行并返回FastCGI响应。

然后,您想处理某人访问location = /index.php时发生的情况,因为使用此相当标准的配置,您将获得

为了解决这个问题,有些人补充说:没关系现在,一切都会因重定向周期错误而中断。为什么?

因为此序列在循环中发生:


当请求index.php URL时,nginx输入chmod,未找到真实文件并打开到/non-existent.php

,然后进入No input file specified.位置块,并尝试检查是否可以读取if。由于无法执行,因此将其重写为相同的/some/page,然后再次返回到location /


评论


谢谢Danila Vershinin!这对我有帮助:location / {try_files $ uri $ uri / /index.php?$args; }

–兔子
19-09-6在20:14