我正在使用 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;