使用HTTP 200 +静态文件捕获所有未处理的请求

时间:2014-09-26 22:17:44

标签: nginx

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

因此,举例来说,如果我的网站https://www.example.com位于x.x.x.x,有人将https://www.bad.com映射到x.x.x.x的我的网址,那么他们只需获得一个空白的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指令,这似乎给出了相同的结果......

一直在拉我的头发一段时间 - 有什么建议吗?

2 个答案:

答案 0 :(得分:4)

为避免发回任何内容,服务器负载最小,请返回204 No Content响应。请参阅Wikipedia Entry

server {
  listen 80 default_server;
  listen 443 ssl default_server;

  return 204;
}

设置catch all服务器的另一种方法是described here

答案 1 :(得分:1)

最简单的捕获 - 如下所示:

server {
  listen 80 default_server;
  listen 443 ssl default_server;

  return 200;
}