2016-07-21 19 views
0

(主にSSLオフロード用の)着信websocket接続のプロキシとして機能するNginx設定を作成しようとしていますが、接続制限に達しています。私はいくつかのガイドに従っており、より多くの接続に対応するためには答えがありますが、奇妙なものが私の注意を引いた。私は現在、18K、クライアントが接続されていると私はnginxのマシン上ss -sを実行すると、これがレポートです:Nginx websocketプロキシはソケットごとに3つの接続を使用します

Total: 54417 (kernel 54537) 
TCP: 54282 (estab 54000, closed 280, orphaned 0, synrecv 0, timewait 158/0), ports 18263 

Transport Total  IP  IPv6 
*   54537  -   - 
RAW  0   0   0 
UDP  1   1   0 
TCP  54002  36001  18001 
INET  54003  36002  18001 
FRAG  0   0   0 

私は36K IP接続が存在することができる方法を理解し、しかし、私は取得しないことはあるもので、追加のIPv6接続では、から来る。私は25K接続以上のスケーリングに問題があると私は、どういうわけか各ソケットに3つの接続が設定されているという事実から来ていると思います。だから、私の質問はこれです:誰かが余分な接続がどこから来ているのか知っていますか?次のように

システム全体の構成と、Kubernetesクラスタ内で実行される:

nginx.conf

user nginx; 
worker_processes auto; 
worker_rlimit_nofile 500000; 

error_log /dev/stdout warn; 
pid  /var/run/nginx.pid; 

# Increase worker connections to accommodate more sockets 
events { 
    worker_connections 500000; 
    use epoll; 
    multi_accept on; 
} 

http { 
    include  /etc/nginx/mime.types; 
    default_type application/octet-stream; 

    log_format main '$remote_addr - $remote_user [$time_local] "$request" ' 
        '$status $body_bytes_sent "$http_referer" ' 
        '"$http_user_agent" "$http_x_forwarded_for"'; 

    access_log off; # don't use it, so don't waste cpu, i/o and other resources. 

    tcp_nopush  on; 
    tcp_nodelay on; 

    include /etc/nginx/conf.d/*.conf; 
} 

proxy.conf(conf.d介し付属):

server { 
    listen 0.0.0.0:443 ssl backlog=100000; 

    # Set a big keepalive timeout to make sure no connections are dropped by nginx 
    # This should never be less than the MAX_CLIENT_PING_INTERVAL + MAX_CLIENT_PING_TIMEOUT in the ws-server config! 
    keepalive_timeout 200s; 
    keepalive_requests 0; 
    proxy_read_timeout 200s; 

    ssl_certificate   /app/secrets/cert.chain.pem; 
    ssl_certificate_key  /app/secrets/key.pem; 
    ssl_prefer_server_ciphers On; 
    ssl_protocols TLSv1.2; 

    location/{ 
     proxy_pass   http://127.0.0.1:8443; 
     proxy_http_version 1.1; 
     proxy_set_header Upgrade $http_upgrade; 
     proxy_set_header Connection "upgrade"; 
    } 
    } 

私はUnixでも次のオプションを設定しています:

/etc/sysctl.d/custom.conf

fs.file-max = 1000000 
fs.nr_open = 1000000 
net.ipv4.netfilter.ip_conntrack_max = 1048576 
net.core.somaxconn = 1048576 
net.ipv4.tcp_max_tw_buckets = 1048576 
net.ipv4.ip_local_port_range 1024 65000 
net.ipv4.tcp_max_syn_backlog = 3240000 
net.nf_conntrack_max = 1048576 
net.ipv4.tcp_tw_reuse= 1 
net.ipv4.tcp_fin_timeout= 15 

/etc/security/limits.d/custom.conf

私は、これは実際には1つのIP名前空間にポッド内のコンテナを連結することにより、すべてのものを混乱Kubernetesしていることが分かったいくつかの同僚の助けを借りて
root soft nofile 1000000 
root hard nofile 1000000 
* soft nofile 1000000 
* hard nofile 1000000 

答えて

0

(そのため、各コンテナlocalhostlink)を介して他者にアクセスできます)。それでは、私はそちらを参照してください:プロキシから

  • 着信接続、プロキシから
  • 発信接続サーバー

から

  • 着信接続これは上の複数の接続を実現するために私を助けていませんが1つのインスタンス、それは奇妙な動作を説明します。

  • 関連する問題