【问题标题】:Catch all non-handled requests with HTTP 200 + static file使用 HTTP 200 + 静态文件捕获所有未处理的请求
【发布时间】:2014-11-22 00:39:27
【问题描述】:

我正在尝试捕获启用站点的配置文件未捕获的所有流量,而不是抛出默认的 404,而是抛出带有空白响应的 200。

因此,例如,如果我的网站是https://www.example.com@x.x.x.x 并且有人将https://www.bad.com 映射到我的x.x.x.x ip,他们只会得到一个 200 的空白内容。

为此,我有一个位于/var/www/index.html 的文件,它是一个空白文件,并在{nginxdir}/conf.d/200catchall.conf 中设置了以下规则,该规则被导入到标准 {nginxdir}/nginx.conf 文件中:

# Serve blank page to any requests not intended for one of our servers
server {
       listen 443;
       server_name _;
       location / {
                root /var/www
       }
}

这非常适合为https://www.bad.com 的请求呈现 200 空白屏幕。但是,当请求 https://www.bad.com/cgibin/nofile.php 之类的内容时,它会尝试遍历目录,并最终向 error.log 抛出错误并最终导致 404。

我还尝试将root 指令替换为try_files /var/www/index.html 指令,这似乎给出了相同的结果...

我已经为此烦恼了一段时间 - 有什么建议吗?

【问题讨论】:

    标签: nginx


    【解决方案1】:

    最简单的包罗万象如下:

    server {
      listen 80 default_server;
      listen 443 ssl default_server;
    
      return 200;
    }
    

    【讨论】:

    • 感谢 Alexey 的快速响应...问题是,如果我收到对 *.html 以外的大多数文件格式的请求(例如 https://www.bad.com/flarg/blarf.zip),浏览器实际上会将响应下载为该文件类型,而不是呈现一个空白的 html 页面......有什么建议吗?
    【解决方案2】:

    为避免发回任何内容,尽量减少服务器负载,改为返回204 No Content 响应。见Wikipedia Entry

    server {
      listen 80 default_server;
      listen 443 ssl default_server;
    
      return 204;
    }
    

    另一种设置捕获所有服务器的方法是described here

    【讨论】:

    • 这最终帮助了我。我对所有不适合我的服务器的请求使用 204。谢谢!
    猜你喜欢
    • 2017-01-02
    • 2015-03-12
    • 1970-01-01
    • 2017-12-29
    • 2022-08-24
    • 1970-01-01
    • 2021-01-09
    • 1970-01-01
    • 2019-03-12
    相关资源
    最近更新 更多