Вопрос: Что означает эта ошибка nginx «переписать или внутренний цикл перенаправления»?


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 default config:

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

49
2018-05-05 05:06


Источник




Ответы:


Это странно, но я готов поспорить, что проблема заключается в следующем:

        try_files $uri $uri/ /index.html;

Проблема здесь в том, что второй параметр здесь, $uri/, вызывает каждый из файлов в вашем index директиву, подлежащую суду в свою очередь. Если ни один не найден, он затем переходит к /index.html, что приводит к тому же location блок для повторного ввода, и поскольку он все еще не существует, вы получаете бесконечный цикл.

Я бы переписал это как:

        try_files $uri $uri/ =404;

для возврата ошибки 404, если ни один из файлов индекса, указанных в index директива существует.


Кстати, те запросы, которые вы видите, это Фоновый шум в Интернете, В частности, это пробники, чтобы определить, является ли ваш веб-сервер открытым прокси-сервером, и его можно злоупотреблять, чтобы скрыть происхождение вредоносного пользователя, когда он идет на злонамеренную деятельность. Ваш сервер не является открытым прокси в этой конфигурации, поэтому вам не нужно беспокоиться об этом.


61
2018-05-05 05:25



Спасибо за объяснение. Есть ли способ блокировать или запрещать подобные зонды? - pavs-maha
На самом деле, просто напишите им приятный 404, и они все равно поймут это. - Michael Hampton♦
Что «смешно» в том, что конфигурация по умолчанию на ubuntu 13.10 имеет try_files $uri $uri/ /index.html; а также index index.php index.html index.htm; задавать. в результате чего возникает ошибка в вопросе. Не так для 12.04 и 14.04, так что менее вероятно, произойдет на сервере. - leifcr


Это раздражало. Он работал несколько недель назад, и мне это не удалось, когда я пробовал сегодня.

Я полагал, что обновление Ubuntu nginx пакет вызывает каталог по умолчанию, где Ubuntu сохранил стандартные файлы индекса, поэтому строка:

root /usr/share/nginx/www;

Больше не будет работать, поскольку расположение файлов находится в /usr/share/nginx/html,

Чтобы исправить это, можно просто изменить корневой указатель на правильный каталог или создать символическую ссылку в новый каталог:

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

Работает на меня.


6
2018-03-27 10:10





Вы также получите это сообщение об ошибке, если index.php полностью отсутствует.


5
2018-01-06 12:58



Да, в моем случае я ошибся, положив путь на параметр root. - dlopezgonzalez


Я столкнулся с этой проблемой вчера, потому что я тестировал nginx поверх прокси-сервера, который кэшировал перенаправление, которое больше не существовало. Решение для меня состояло в том, чтобы $ sudo service squid3 restart на прокси-сервере squid3, с которым я подключался.


2
2017-11-26 22:46



Заметьте, я разделял этот ответ с добрыми намерениями. Существует несколько причин для этой ошибки, и для определения кэширования прокси-сервера требуется некоторое время. - Ninjaxor


Если бы сегодня эта ошибка, потратьте несколько часов на выяснение причины. Оказалось, что кто-то удалил все файлы сайта.


0
2017-07-17 20:23