tomcat6 位于 xinetd 后面-真实客户端 IP

tomcat6 位于 xinetd 后面-真实客户端 IP

server.xml,在,Connector我指定proxyPort80

这是 xinetd 服务:

service http
{
        socket_type     = stream
        protocol        = tcp
        user            = tomcat6
        wait            = no
        bind            = 0.0.0.0
        port            = 80
        redirect        = 127.0.0.1 8080
        disable         = no
        flags           = REUSE
        log_type        = FILE /var/log/xinetd_http_access.log
        log_on_success  -= PID HOST DURATION EXIT

        per_source      = UNLIMITED
        instances       = UNLIMITED
}

不过,在 Tomcat 的访问日志中我看到如下行:

127.0.0.1 - - [17/Aug/2012:00:23:23 +0300] "GET / HTTP/1.1" 200 1975
127.0.0.1 - - [17/Aug/2012:00:23:23 +0300] "GET /_static/css/global.css HTTP/1.1" 304 -

有任何想法吗?

答案1

xinetd 能否传递转发HTTP 标头?

如果 tomcat 位于通过 X-FORWARDED-FOR 的反向代理(例如 nginx)之后,即:

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

然后您可以在 tomcat server.xml 中设置 AccessLogValve:

pattern="%{X-Forwarded-For}i %l %u %t %r %s %b %{User-Agent}i %{Referer}i"

您将在访问日志中获得客户端的原始 IP 地址。

干杯

答案2

不,什么也做不了。您无法使用 xinetd 执行此操作。它似乎对我有用,但后来我意识到日志中的大多数 IP 地址仍然是 127.0.0.1。

我最终设法让 Tomcat 以(大多数)受限用户身份运行剛果使用 --user 选项。使用 iptables 也可以。

相关内容