记录 Ubuntu 上的传入请求(端口 80、443)

记录 Ubuntu 上的传入请求(端口 80、443)

我们在 Ubuntu 服务器上运行 Tomcat。它运行一个向互联网开放的 Web 服务。

有时流量会突然激增,然后又下降。Tomcat 访问日志中没有任何异常。我猜是因为有些请求太“重”以至于它们永远无法完成,因此没有记录到 Tomcat 访问日志中。

有没有办法配置 Ubuntu或第三方工具按照以下格式记录传入的请求(如下)?

日期、时间、URL(带有查询字符串参数)、IP 地址(客户端)

每个请求应占一行。每个请求都应在执行前记录。仅应记录对端口 80 和 443 的传入请求。

答案1

为您提供 2 种可能的解决方案。

  1. 配置 squid 或类似程序作为反向代理,查找“squid 反向代理”。警告:您可能会发现存在兼容性问题,但我不是专家。
  2. 可以使用 iptables 记录进入服务器的流量。请参阅LOGiptables 手册页中的目标。警告:iptables 不支持 http。除了请求的 url 之外,您将获得所需的所有信息。

答案2

安装 nginx(或 Apache)并将其配置为 Tomcat 前面的简单反向代理。以下是您可以在 nginx 中的虚拟主机中使用的示例配置。默认访问日志格式应该会为您提供所需的信息。

server {
  listen 80;
  server_name www.example.org example.org;

  location /context/ {
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-Server $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass http://tomcat-server:8080/context/;
  }

  access_log /var/log/nginx/www.example.org-access.log;
  error_log /var/log/nginx/www.example.org-error.log;
}

编辑:即使 Tomcat 无法满足请求,也应该将其记录在 nginx(以及 Tomcat)中。

相关内容