如何在Nginx中返回一个204而不是404的favicon.ico文件?

问题描述 投票:5回答:2

对于我的网站,我通常有两个 server{} 块:一个为网站服务,另一个从不同的域为该网站提供静态内容。因为 favicon.ico 文件总是从主域而不是静态域中请求,我必须在网站的 server{} 而不是静态文件块。

当一个 favicon.ico 文件未找到,Nginx返回我的定义404错误页面,以及404 HTTP状态码。然而,我不想为我漂亮的404页面发送这些位。我想发送一个完全空的响应和204状态码。下面是我试过的,然而并不奏效。有什么正确的方法吗? 我的想法是,204将表示一个发现的文件,然而一个完全空白的图像。

另外,我试图保存位的做法其实是个坏主意吗? 如果,事实上,返回204而不是404是个坏主意,那么有没有一种更优雅的方法来返回一个空的404页面,而不需要创建一个新的、实际上是空的文件,并将其设置为一个新的文件?error_page 指令在该位置块内?

server {
    ...


    error_page  404          /../static/404.html;

    location @return_204 {
        return  204;
    }

    # Case-insensitive matching of .txt and .xml files.
    # (Example: robots.txt, crossdomain.xml, and sitemap.xml)
    location ~* \.(txt|xml)$ {
        try_files  $uri /../static/$uri;
    }

    location = /favicon.ico {
        log_not_found  off;
        error_page     404 = @return_204;

        try_files      $uri /../static/$uri;
    }

    ...
}
nginx http-status-code-404 http-status-code-204
2个回答
8
投票

我想这就是你要找的东西。

location = /favicon.ico {
         try_files $uri = 204;
}

它将尝试在URI或204中找到文件作为后备。这里是相关的文档。


1
投票

一个简单的

location /favicon.ico { return 204; }

会是最简单的。

© www.soinside.com 2019 - 2024. All rights reserved.