当我试图访问不存在的 URL 配置时,我用头撞在一个表上试图找出是什么导致了我的 nginx 配置中的重定向循环配置如下:
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;
}
此域是一个简单的静态 HTML 站点,仅用于某些测试目的。我希望 error_page 指令会响应 PHP-FPM 无法找到给定文件,因为我有 fastcgi_intercept_errors ;在 http 块和 nave error_page 设置中,但我猜请求甚至在内部重定向的某个地方之前就失败了。任何帮助将非常感激。
罪魁祸首是:
try_files $uri $uri/ ;
http://nginx.org/r/try_files(注意最后一个参数是返回码或者内部重定向的URI)
正如其他人所说,这是罪魁祸首:
它创建了一个重定向循环,因为
try_files
如果找不到文件,最后一个参数应该指向该位置。我通过添加一个来解决它=404
,如下所示: