Saya membenturkan kepala ke meja mencoba mencari tahu apa yang menyebabkan siklus pengalihan dalam konfigurasi nginx saya ketika mencoba mengakses URL yang tidak ada. Konfigurasi berjalan sebagai berikut:
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;
}
domain ini adalah situs HTML STATIK sederhana hanya untuk beberapa tujuan pengujian. Saya berharap bahwa arahan error_page akan muncul sebagai respons terhadap PHP-FPM yang tidak dapat menemukan file yang diberikan karena fastcgi_intercept_errors aktif; di http blok dan nave error_page diatur, tapi saya kira permintaan gagal bahkan sebelum itu di suatu tempat di pengalihan internal. Bantuan apa pun akan sangat dihargai.
Jawaban:
Pelakunya adalah:
try_files $uri $uri/ ;
http://nginx.org/r/try_files (perhatikan bahwa parameter terakhir adalah kode kembali atau URI ke redirect internal)
sumber
$uri/
? Lihat parameter di sini: github.com/roots/trellis/blob/…Seperti yang telah dinyatakan orang lain, inilah penyebabnya:
Itu membuat pengalihan loop, karena parameter terakhir
try_files
harus menunjuk ke lokasi jika file tidak ditemukan. Saya menyelesaikannya dengan menambahkan=404
, seperti ini:sumber