【问题标题】:Golang doesn't recognize Close-NotifierGolang 无法识别 Close-Notifier
【发布时间】:2016-01-12 08:16:43
【问题描述】:

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

【问题讨论】:

  • 只是一个快速的想法,但 不关闭连接 不正是您的代理配置中的 keepalive=on 标志应该做什么?
  • 该标志可防止防火墙在连接处于非活动状态时断开连接。所以我尝试了你的想法并删除了标志,但我遇到了同样的问题。
  • 也许 apache 使用了一个连接到你的 go 服务器的池?
  • 我怎么知道 apache 是否使用池?
  • @user2715821,错误日志级别“调试”将这些血淋淋的细节(例如初始化工作人员、选择工作人员等)转储到与您的虚拟主机/其他相关的日志接收器中。

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


【解决方案1】:

当客户端断开连接时,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

【讨论】:

    猜你喜欢
    • 2022-01-22
    • 1970-01-01
    • 2016-06-20
    • 2014-10-11
    • 2021-11-01
    • 1970-01-01
    • 2018-10-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多