在Ubuntu上logging传入的请求(端口80,443)

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

有时会突然出现交通堵塞,并且下降。 Tomcat访问日志中没有任何exception。 我想这是因为一些请求是如此“沉重”,他们永远不会完成,因此不logging到Tomcat的访问日志。

有没有办法configurationUbuntu 或第三方工具以下面的格式logging传入的请求?

date,时间,URL(带查询string参数),IP地址(客户端)

每个请求应该有一行。 每个请求在执行之前都应该被logging下来。 只有传入端口80和443的请求应该被logging。

2种可能的解决scheme。

  1. configuration鱿鱼或类似的作为一个反向代理,查找'鱿鱼反向代理'。 警告:你可能会发现你有兼容性问题,但我不是专家。
  2. 可以使用iptables来logging进入服务器的stream量。 在iptables的man-page中查看LOG目标。 警告:iptables不会被HTTP知道。 除了请求的url之外,您将获得所有您想要的信息。

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

 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无法提供请求,它应该logging在nginx(也在Tomcat中)。