私たちは、毎秒数百の SSL リクエストを処理する Java http クライアントをサポートする http プロキシ サーバーを使用しています。クライアントは netty が提供する AsyncHttpClient で、NIO (com.ning:async-http-client:1.7.19) を使用します。プロキシ サーバーは Squid 3.3 を使用しています。
クライアントを「allowSslConnectionPool」に構成すると、NettyAsyncHttpProvider 内に java.nio.channels.ClosedChannelException が頻繁に表示されます (同様の問題が発生した Grizzly を試しました)。SSL 接続プールを無効にすると、すべて正常に動作します。逆に、プーリングを有効にしてプロキシ サーバーを使用しないと、問題なく動作します。明らかに、接続をプールしない問題は、リクエストごとに新しい SSL 接続を作成することで、サーバーに深刻な影響を与えることです。
クライアントで SSL 接続をローカルにプールし、HTTPS プロキシを使用することに根本的な問題はありますか? Squid またはクライアント自体でこれを機能させるための設定が必要なようですが、現時点では途方に暮れています。
クライアント構成:
new AsyncHttpClientConfig.Builder().setMaximumConnectionsTotal(maxconns.get()) .setMaximumConnectionsPerHost(consPerHost.get()) .setUserAgent(userAgent.get()) .setConnectionTimeoutInMs(MAX_CONN_TIME_MS) .setRequestTimeoutInMs(MAX_RESP_TIME_MS) .setFollowRedirects(真) .setAllowSslConnectionPool(真) .setProxyServer(新しい ProxyServer(ProxyServer.Protocol.HTTPS, "xxx", 3128, "yyy", "zzz") )
例外は次のとおりです。
2013-08-02 09:33:33,342 DEBUG (新しい I/O ワーカー #16 ) com.ning.http.client.providers.netty.NettyAsyncHttpProvider: チャネルで予期しない I/O 例外が発生しました [id: 0xd9cce308, xxx => yyy ] 2013-08-02 09:33:33,343 DEBUG (新しい I/O ワーカー #16) com.ning.http.client.providers.netty.NettyAsyncHttpProvider: java.nio.channels.ClosedChannelException org.jboss.netty.handler.ssl.SslHandler$6.run(SslHandler.java:1580) で org.jboss.netty.channel.socket.ChannelRunnableWrapper.run(ChannelRunnableWrapper.java:40) で org.jboss.netty.channel.socket.nio.AbstractNioWorker.executeInIoThread(AbstractNioWorker.java:71) で org.jboss.netty.channel.socket.nio.NioWorker.executeInIoThread(NioWorker.java:36) で org.jboss.netty.channel.socket.nio.AbstractNioWorker.executeInIoThread(AbstractNioWorker.java:57) で org.jboss.netty.channel.socket.nio.NioWorker.executeInIoThread(NioWorker.java:36) で
関連する Squid 設定 (ssl-bump の有無にかかわらず試しました) :
http_port 3128 ssl-bump cert=/etc/squid3/server.crt キー=/etc/squid3/server.key always_direct すべて許可 ssl_bump すべて許可