Nginx:尝试返回特定 404 图像的重定向过多?

Nginx:尝试返回特定 404 图像的重定向过多?

我正在使用 nginx v1.6.2 为基于 Web 的应用程序提供动态 nodeJS 和静态文件内容。

在某个位置(恰好仅提供静态 png 文件)内,我希望任何未找到的图像请求都返回一个特定的占位符图像“blank.png”。

例如,路径中的文件%nginxroot%/html/tiles/sectionals/0/0/0.png确实存在,因此 URLhttp://myhost/tiles/sectionals/0/0/0.png应该返回请求的图像文件。但是路径处的文件%nginxroot%/html/tiles/sectionals/0/0/99.png应该返回请求的图像文件。但是路径处不是存在,因此请求http://myhost/tiles/sectionals/0/0/99.png应返回文件%nginxroot%/html/tiles/blank.png

这是我的 nginx.conf(为简洁起见进行了编辑):

events {
   worker_connections  4096;
}

http {

    include             mime.types;
    default_type        application/octet-stream;
    sendfile            on;
    keepalive_timeout   20;

    gzip                on;
    gzip_comp_level     6;
    gzip_vary           on;
    gzip_min_length     1000;
    gzip_proxied        any;
    gzip_types          text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
    gzip_buffers        16 8k;

    server {

        listen 80;
        server_name     *.myhost.com;

        root            html;

        #dynamic content at root url
        location / {
            proxy_set_header    X-Real-IP            $remote_addr;
            proxy_set_header    X-Forwarded-For  $proxy_add_x_forwarded_for;
            proxy_set_header    X-Forwarded-Proto $scheme;
            proxy_set_header    Host                   $http_host;
            proxy_set_header    X-NginX-Proxy    true;
            proxy_set_header    Connection "";
            proxy_http_version  1.1;
            proxy_pass          http://127.0.0.1:9000;
            proxy_redirect      off;
            rewrite             ^/auth/(.*)$ /$1 break;
        }

        # tiles are all static .png files
        location /tiles/ {
            proxy_intercept_errors on;
            error_page 404 = blank.png;
        }

    }
}

我看到的此配置的行为是,如果文件存在,它就会起作用,如果文件不存在,浏览器会告诉我有一个重定向循环,并且控制台会显示GET http://myhost/tiles/sectionals/0/0/blank.png net::ERR_TOO_MANY_REDIRECTS

我尝试过一些可能解决路径问题的解决方案,例如 error_page 404 = ./blank.png、关闭或省略 proxy_intercept_errors、在 html 和 tiles 目录中放置一个 blank.png,但似乎无法使其正常工作 - 只有一种例外,即在每个可能需要图像的目录中放置一个 blank.png。但这似乎是一种愚蠢的解决方法。

因此我理解 nginx 无法找到 blank.png,因此无限重定向(或超出某个阈值),但什么应该.conf 文件的位置和/或位置应该blank.png 位于哪里?

答案1

您需要指定要提供的文档的绝对路径。否则,它将被视为相对于最初请求的 URL 的路径。

error_page 404 = /tiles/blank.png;

相关内容