NGINX 上游代理链

NGINX 上游代理链

我的网络服务器目前被内容垃圾邮件发送者淹没。

我不想使用 iptables 完全阻止 IP,因为它们来自动态 IP,如果我阻止一个 IP,那么几分钟后垃圾邮件就会来自另一个 IP,所以我假设它使用受感染 PC 的僵尸网络,这些 PC 可能会重新连接,我不想最终完全阻止整个 ISP 或永久阻止 tor 出口节点。所以我想使用柔软的阻止类似于 cloud-flare 和 google 所做的。它们会为那些得分较低的 IP 显示一个网页,其中包含阻止它们的原因以及解除阻止的可能性。

我也有一个解决方案,但我想知道是否有更好的方法来解决这个问题。

我有一条捕获所有请求的规则,它会将请求传递给对 IP 进行评分的应用程序,如果 IP 的评分很差,则信息页面将显示 502 错误。如果 IP 没有问题,则返回 418,并将请求传递给@final-pass

location ~ {
  error_page 500 418 = @final-pass;

  proxy_set_header X-Real-IP  $remote_addr;
  proxy_set_header X-Forwarded-For $remote_addr;
  proxy_set_header Host $host;
  proxy_intercept_errors on;
  proxy_pass http://unix:/tmp/ip-check.sock;

}

然后我@final-pass将这个请求转发到第二个 nginx 实例,该实例具有所有虚拟主机的常规设置:

location @final-pass {
  proxy_read_timeout      300;
  proxy_connect_timeout   300;
  proxy_redirect          off;
  proxy_buffering off;

  proxy_set_header    Host                $http_host;
  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_pass http://127.0.0.1:8080;

  proxy_request_buffering off;
  proxy_http_version 1.1;
}

有没有更好或正确的方法来解决这个问题?418错误似乎有点难看。

编辑 有没有更好/正确的方法来实现,我可以先将请求传递给一个上游,如果该上游未处理该请求,则将其传递给另一个上游,而不会滥用错误418

编辑2 444可能是一个更好的错误代码,但问题仍然是一样的,有没有比使用错误更好的方法来解决这种问题转发

相关内容