Golang不认识Close-Notifier

时间:2016-01-12 08:16:43

标签: apache go proxy reverse-proxy mod-proxy

当我使用Apache mod_proxy将我的go-requests转发到golang-webserver时,我的go-server并不能识别客户端何时断开连接。我正在使用关闭通知程序:

notify := rw.(http.CloseNotifier).CloseNotify()
go func() {
        <-notify
        brk.closingClients <- cl.session.Value
}

当我使用防火墙站点路径生根时,它也不起作用。 但是,当我使用自己的golang反向代理时,它可以很好地运行,没有任何问题。 使用我的apache mod_proxy,客户端会在向go webserver发送更多真实数据后收到通知。

也许有人知道如何解决我的问题,我会在客户端直接断开连接时识别,因此无需再接收任何数据。

这里我的mod_proxy配置

     SSLProxyEngine On
    ProxyRequests On
    SSLProxyVerify none
    SSLProxyCheckPeerCN off
    SSLProxyCheckPeerName off
    ProxyPass /event https://xxx.xxx.xxx.xxx:8888/event flushpackets=on  keepalive=on

1 个答案:

答案 0 :(得分:3)

当客户端断开连接时,Apache服务器不会关闭连接。尽可能长时间地重用连接会更有效率。

如果确实希望反向代理每次都重新连接(请注意,您可能会遇到性能或端口分配问题),您可以强制mod_proxy使用HTTP / 1.0或明确关闭每次使用以下任何一种连接:

SetEnv force-proxy-request-1.0 1
SetEnv proxy-nokeepalive 1

https://httpd.apache.org/docs/2.4/mod/mod_proxy.html#envsettings