173.9.5. Obtaining X-Forwarded-For header with HttpServletRequest.getRemoteAddr()

如果 HTTP 请求由 Apache 服务器处理,并转发到带有 mod_proxy 的 jetty,则原始客户端 IP 地址位于 X-Forwarded-For 标头中,HttpServletRequest.getRemoteAddr ()将返回 Apache 代理的地址。

Jetty 具有 forward 属性,它取来自 X-Forwarded-For 的值,并将其放置在 HttpServletRequest remoteAddr 属性中。  此属性不能通过端点配置直接可用,但可以使用 socketConnectors 属性轻松添加:

<bean id="jetty" class="org.apache.camel.component.jetty.JettyHttpComponent">
    <property name="socketConnectors">
        <map>
            <entry key="8080">
                <bean class="org.eclipse.jetty.server.nio.SelectChannelConnector">
                    <property name="forwarded" value="true"/>
                </bean>
            </entry>
        </map>
    </property>
</bean>

这在现有 Apache 服务器处理域的 TLS 连接并将其在内部代理到应用程序服务器时特别有用。