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.
Odpowiedzi:
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)
źródło
$uri/
? Zobacz parametr tutaj: github.com/roots/trellis/blob/…Jak stwierdzili inni, jest to winowajcą:
Tworzy pętlę przekierowania, ponieważ ostatni parametr
try_files
powinien wskazywać lokalizację, jeśli plik nie zostanie znaleziony. Rozwiązałem to, dodając=404
:źródło