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"
Otrzymuję je z dziennika błędów nginx, nie mam subdomeny „kowol”, nie mam żadnych linków do qq.com ani joesfitness.net na mojej stronie. Co się dzieje?
Edycja: Domyślna konfiguracja 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;
iindex index.php index.html index.htm;
ustawione. powodując błąd w pytaniu. Nie dotyczy to 12.04 i 14.04, więc jest mniej prawdopodobne na serwerze.Otrzymasz również ten komunikat o błędzie, jeśli
index.php
całkowicie go brakuje.źródło
To było denerwujące. Działało kilka tygodni temu i nie udało mi się, kiedy próbowałem dzisiaj.
Wierzyłem, że aktualizacja
nginx
pakietu Ubuntu spowoduje zmianę domyślnego katalogu, w którym Ubuntu zachował standardowe pliki indeksu, więc wiersz:Nie będzie już działać, ponieważ lokalizacja plików znajduje się w
/usr/share/nginx/html
.Aby to naprawić, wystarczy zmienić wskaźnik główny na właściwy katalog lub utworzyć dowiązanie symboliczne do nowego katalogu:
Pracuje dla mnie.
źródło
Wczoraj napotkałem ten problem, ponieważ testowałem nginx na serwerze proxy, który buforował przekierowanie, które już nie istniało. Rozwiązaniem było dla mnie
$ sudo service squid3 restart
połączenie z serwerem proxy squid3, przez który się łączyłem.źródło
Gdyby ten błąd był dzisiaj, poświęć kilka godzin na ustalenie przyczyny. Okazało się, że ktoś usunął wszystkie pliki strony.
źródło
Wystarczy dodać kolejny przypadek, gdy tak się stanie. Podobnie jak w zaakceptowanej odpowiedzi, dzieje się tak zwykle, gdy tworzona jest sekwencja testowanych lokalizacji, a następnie tworzona jest swego rodzaju wewnętrzna pętla przekierowania (niekończąca się).
Czasami objawia się to złą konfiguracją NGINX, a nawet restrykcyjnym chmod (w niektórych konfiguracjach blokujących). Oto przykład
Załóżmy, że masz
index.php
kontroler z przodu, jak zwykle:Najczęściej podajesz adresy URL SEO, jak
/some/thing
za pośrednictwem swojegoindex.php
.Ale jak zwykle istnieją pewne pliki PHP, które należy ujawnić bezpośrednio (a więc
location ~\.php
i nielocation = /index.php
.Przypuszczam też, że Twój
index.php
zostałachmod
-ded do 0400 dla Lockdown bezpieczeństwa.W tym przypadku wszystko nadal działa poprawnie, o ile plik jest własnością „użytkownika PHP-FPM”. NGINX nie musi czytać pliku, ponieważ po prostu przekazuje swoją nazwę pliku do PHP-FPM w celu wykonania i odzyskuje odpowiedź FastCGI.
Następnie chcesz poradzić sobie z przypadkiem tego, co się dzieje, gdy ktoś odwiedza,
/non-existent.php
ponieważ przy tej raczej standardowej konfiguracji uzyskaszNo input file specified.
taką sytuację.Aby sobie z tym poradzić, niektórzy dodają:
Cóż, oczywiście, że
if
zło jest jak na Nginx, ale nie o to chodzi. Wszystko się teraz zepsuje z błędem cyklu przekierowania. Dlaczego?Ponieważ ta sekwencja dzieje się w pętli:
/some/page
żądany jest adres URL, nginx wchodzilocation /
, nie znajduje prawdziwego pliku i zmienia go/index.php
.php
bloku lokalizacji i próbuje sprawdzić, czy potrafi odczytaćindex.php
. Ponieważ nie może , przepisuje go do tego samego,index.php
a następnie wraca do niego.php
ponownie.źródło