Nginx重写或内部重定向周期


13

我将头顶在一张桌子上,试图弄清是什么原因导致尝试访问不存在的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;
}

该域是一个简单的STATIC HTML网站,仅出于某些测试目的。我希望error_page指令可以启动,以响应PHP-FPM无法找到给定的文件,因为我打开了fastcgi_intercept_errors。在http块中设置了error_page,但我猜测请求甚至在内部重定向之前就失败了。任何帮助将非常感激。


客户端浏览器在报告重定向循环,还是nginx?如果是客户端,重定向到哪个位置?
Shane Madden

两者都在报告。客户最终以/errors//errors//errors//errors//errors/...404.html的URL结尾
milosgajdos 2012年

nginx的日志条目是什么样的?
Shane Madden

Answers:


11

罪魁祸首是: try_files $uri $uri/ ;

http://nginx.org/r/try_files(请注意,最后一个参数是内部重定向的返回码或URI)

如果未找到任何文件,则进行内部重定向到由最后一个参数指定的uri。


谢谢。Roots Trellis LEMP设置只是发生了这些错误之一。导入WooCommerce数据后发生。从来没有过。在这些情况下,您会推荐什么?删除参数$uri/?参见参数这里:github.com/roots/trellis/blob/...
RH和

2

正如其他人所说,这是罪魁祸首:

    try_files $uri $uri/ ;

它创建了一个重定向循环,因为try_files如果找不到文件,则的最后一个参数应指向该位置。我通过添加来解决此问题=404,如下所示:

    try_files $uri $uri/ =404 ;
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.