当我使用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
答案 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