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;
#}
}
try_files $uri $uri/ /index.html;
иindex index.php index.html index.htm;
устанавливает. приводя к ошибке в вопросе. Не так для 12.04 и 14.04, поэтому на сервере это случается реже.Вы также получите это сообщение об ошибке, если ваш
index.php
полностью отсутствует.источник
Это было раздражающим. Это работало несколько недель назад, и это не помогло мне, когда я попробовал сегодня.
Я полагал, что обновление
nginx
пакета Ubuntu привело к изменению каталога по умолчанию, в котором Ubuntu хранил стандартные индексные файлы, поэтому строка:Больше не будет работать, поскольку расположение файлов находится в
/usr/share/nginx/html
.Для исправления можно просто изменить корневой указатель на правильный каталог или создать символическую ссылку на новый каталог:
Работает для меня.
источник
Я столкнулся с этой проблемой вчера, потому что я тестировал nginx через прокси-сервер, который кэшировал перенаправление, которого больше не было. Для меня решение было
$ sudo service squid3 restart
на прокси-сервере squid3, через который я подключался.источник
Если бы сегодня произошла эта ошибка, потратьте несколько часов на выяснение причины. Оказалось, кто-то удалил все файлы сайта.
источник
Просто чтобы добавить еще один случай, когда это произойдет. Как и в принятом ответе, в общем, это происходит, когда создается последовательность местоположений, а затем создается своего рода внутренний цикл перенаправления (бесконечный).
Иногда это проявляется в плохом конфиге NGINX и даже в ограничительном chmod (в некоторых конфигурациях блокировки). Вот пример.
Предположим, что у вас есть
index.php
фронт-контроллер, как обычно:Вы в основном обслуживаете SEO-адреса, например,
/some/thing
через вашindex.php
.Но, как обычно, есть некоторые PHP-файлы, которые вам нужно открыть напрямую (таким образом,
location ~\.php
и нетlocation = /index.php
.Также предположим, что вы
index.php
былиchmod
добавлены к 0400 для блокировки безопасности.В этом случае все работает нормально, пока файл принадлежит «пользователю PHP-FPM». NGINX не нужно читать файл, потому что он просто передает свое имя файла PHP-FPM для выполнения и возвращает ответ FastCGI.
Затем вы хотите обработать случай того, что происходит, когда кто-то посещает,
/non-existent.php
потому что с этой довольно стандартной конфигурацией вы получитеNo input file specified.
для этого случая.Чтобы справиться с этим, некоторые люди добавляют:
Ну, конечно
if
, зло в соответствии с nginx, но это не так. Теперь все будет прерываться с ошибкой цикла перенаправления. Почему?Потому что эта последовательность происходит в цикле:
/some/page
запрашивается URL, nginx входитlocation /
, не находит настоящий файл и превращает его в/index.php
.php
блок местоположения и пытается проверить, может ли он прочитатьindex.php
. Поскольку он не может , он переписывает его на то же самое, аindex.php
затем возвращается обратно.php
.источник