nginx przepisanie lub wewnętrzny cykl przekierowań

13

Uderzam głową o stół, próbując dowiedzieć się, co powoduje cykl przekierowań w mojej konfiguracji nginx, gdy próbuję uzyskać dostęp do adresu URL, który nie istnieje. Konfiguracja wygląda następująco:

server {
        listen       127.0.0.1:8080;
        server_name  .somedomain.com;
    root  /var/www/somedomain.com;

        access_log /var/log/nginx/somedomain.com-access.nginx.log;
    error_log  /var/log/nginx/somedomain.com-error.nginx.log debug;

        location ~* \.php.$ {
        # Proxy all requests with an URI ending with .php*
        # (includes PHP, PHP3, PHP4, PHP5...)
        include /etc/nginx/fastcgi.conf;
        }

        # all other files
        location / {
            root  /var/www/somedomain.com;
        try_files $uri $uri/ ;
        }

    error_page 404 /errors/404.html;
        location /errors/ {
                alias /var/www/errors/;
        }       

        #this loads custom logging configuration which disables favicon error logging
        include /etc/nginx/drop.conf;
}

ta domena jest prostą STATYCZNĄ witryną HTML tylko do niektórych celów testowych. Spodziewałbym się, że dyrektywa error_page uruchomi się w odpowiedzi na to, że PHP-FPM nie będzie w stanie znaleźć danych plików, ponieważ mam włączone fastcgi_intercept_errors; w bloku http i nave ustawionych error_page, ale zgaduję, że żądanie nie powiedzie się nawet wcześniej, gdzieś na wewnętrznych przekierowaniach. Każda pomoc będzie mile widziana.

milosgajdos
źródło
Czy przeglądarka kliencka zgłasza pętlę przekierowań, czy jest to Nginx? Jeśli to klient, do której lokalizacji są przekierowania?
Shane Madden
oboje to zgłaszają. Klient ostatecznie otrzymuje adres URL /errors//errors//errors//errors//errors/...404.html
milosgajdos
Jak wygląda wpis do dziennika z nginx?
Shane Madden

Odpowiedzi:

11

Winowajcą jest: try_files $uri $uri/ ;

http://nginx.org/r/try_files (pamiętaj, że ostatnim parametrem jest kod powrotu lub identyfikator URI do wewnętrznego przekierowania)

Jeśli żaden z plików nie zostanie znaleziony, następuje wewnętrzne przekierowanie do identyfikatora URI określonego przez ostatni parametr.

VBart
źródło
Dzięki. Właśnie miałem jeden z tych błędów w konfiguracji LEMP Roots Trellis. Zdarzyło się po imporcie danych WooCommerce. Nigdy wcześniej tego nie miałem. Co byś polecił w tych przypadkach? Usunąć parametr $uri/? Zobacz parametr tutaj: github.com/roots/trellis/blob/…
rhand
2

Jak stwierdzili inni, jest to winowajcą:

    try_files $uri $uri/ ;

Tworzy pętlę przekierowania, ponieważ ostatni parametr try_filespowinien wskazywać lokalizację, jeśli plik nie zostanie znaleziony. Rozwiązałem to, dodając =404:

    try_files $uri $uri/ =404 ;
joepio
źródło