HAPROXY Frontend Cur Session никогда не уменьшается

Мы получили странное поведение с haproxy для одного сайта: текущие сеансы внешнего интерфейса никогда не уменьшаются.

HAProxy-интерфейс

Таким образом, ограничения достигаются через 3 или 4 дня, и мы должны перезапустить haproxy для сброса активных соединений.

Backend-серверы - это простой nginx с php7. Вот haproxy conf:

global
    log /dev/log    local0
    log /dev/log    local1 notice
    chroot /var/lib/haproxy
    stats socket /run/haproxy/admin.sock mode 666 level user
    stats timeout 30s
    user haproxy
    group haproxy
    daemon
    maxconn 50000

    ca-base /etc/ssl/certs
    crt-base /etc/ssl/private

    ssl-default-bind-ciphers ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS
    ssl-default-bind-options no-tls-tickets no-sslv3
    ssl-default-server-ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256
    ssl-default-server-options no-sslv3 no-tlsv10 no-tlsv11 no-tls-tickets
tune.ssl.default-dh-param 2048

defaults
    log         global
    mode        http
    option httplog
    option dontlognull
    option dontlog-normal
    option forwardfor
    option redispatch
    retries 3
    compression algo gzip
    compression type text/html text/plain text/css text/javascript application/javascript 
    timeout     connect     4s
    timeout     client      10s
    timeout     server      30s
    timeout     http-keep-alive 500
    timeout http-request    30s
    errorfile   400   /etc/haproxy/errors/400.http
    errorfile   403   /etc/haproxy/errors/403.http
    errorfile   408   /etc/haproxy/errors/408.http
    errorfile   500   /etc/haproxy/errors/500.http
    errorfile   502   /etc/haproxy/errors/502.http
    errorfile   503   /etc/haproxy/errors/503.http
    errorfile   504   /etc/haproxy/errors/504.http

frontend splash-frontend
    mode http
    maxconn 20000
    bind xx.xx.xx.xx:80
    redirect scheme https code 301 if !{ ssl_fc }
    bind xx.xx.xx.xx:443 ssl crt /etc/haproxy/certs/splash.domain.net.pem alpn h2,http/1.1
    default_backend splash-backend
    http-response set-header Strict-Transport-Security max-age=15768000

backend splash-backend
    balance roundrobin
    mode http
    server splash1 xx.xx.xx.xx:443 check inter 1000 ssl verify none
    server splash2 xx.xx.xx.xx:443 check inter 1000 ssl verify none
    server splash3 xx.xx.xx.xx:443 check inter 1000 ssl verify none

Затем nginx conf для серверов:

user www-data www-data;
worker_processes 2;
pid /var/run/nginx.pid;
worker_rlimit_nofile 1024;
include /etc/nginx/modules-enabled/*.conf;

events {
    worker_connections 512;
}

http {
    include /etc/nginx/mime.types;
    default_type application/octet-stream;
    sendfile "on";
    tcp_nopush "on";
    tcp_nodelay "on";
    keepalive_timeout "5";
    access_log "/var/log/nginx/access.log";
    error_log /var/log/nginx/error.log error;
    server_tokens off;
    types_hash_max_size 2048;

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

    upstream php-handler {
        server 127.0.0.1:9000;
    }

    server {
        listen 80;
        listen 443 default ssl http2;
        server_name splash.domain.net;
        root /var/www/domain.net/splash;
        include /etc/nginx/ssl.conf;
        include /etc/nginx/errors.conf;
        error_log syslog:server=xx.xx.xx.xx:11514 notice;
        access_log syslog:server=xx.xx.xx.xx:11514,tag=nginx,severity=info;
        location / {
          index           index.php;
          try_files       $uri $uri/ /index.php?$uri&$args;
        }

        location ~* \.(img|css|js|jpg|jpeg|gif|png|map)$  {
          deny            all;
        }

        location ~ \.php$ {
          fastcgi_pass    php-handler;
          fastcgi_index   index.php;
          include         /etc/nginx/fastcgi_params;
          fastcgi_param   SCRIPT_FILENAME    $document_root$fastcgi_script_name;
          fastcgi_param   SCRIPT_NAME        $fastcgi_script_name;
          proxy_cache     off;
          expires         -1;
        }

    }

}

И наконец, источник веб-страницы:

<?php $redirectURL = isset($_GET['loginurl']) && $_GET['loginurl'] ? $_GET['loginurl'] : 'http://captiveportal.domain.net'; ?>
<!doctype html>
<html>
    <head>
        <title>Chargement...</title>
        <meta http-equiv="Cache-control" content="no-cache">
        <meta http-equiv="Pragma" content="no-cache">
        <meta name="viewport" content="width=device-width, user-scalable=no">
        <noscript><meta http-equiv="refresh" content="3; url=<?php echo $redirectURL; ?>"></noscript>
        <style>html{width: 100%;height: 100%;}body {margin: 0 auto;padding: 20px;width: auto;overflow-y: none;font-family: 'Open Sans',sans-serif;font-weight: 400;color: #777;text-align: center;}a {text-decoration: none;color: #777;}.content {padding: 15px;overflow: hidden;}.centered {position: absolute;top: 50%;left: 50%;transform: translateY(-50%) translateX(-50%);}.load-wrap{text-align: center;}.radio {display: inline-block;width: 180px;height: 180px;}</style>
        <script type="text/javascript">function onLoad() { window.setTimeout( function(){ window.location = "<?php echo $redirectURL; ?>"; }, 2000 ); }</script>
    </head>
    <body onload="onLoad();">
        <div class="content">
            <a href="<?php echo $redirectURL; ?>">
                <div class="centered">
                    <h3>Loading ...</p>
                </div>
             </a>
        </div>
    </body>
</html>

Наш контекст заключается в том, что пользователи находятся за захваченным порталом, и процесс таков:

1 - Запросы пользователей в Интернет перехватываются порталом авторизации и перенаправляются на всплывающую страницу, описанную выше.

2a. Если начальная страница запускается с помощью браузера, на веб-сайте портала можно использовать javascript или мета-редирект, чтобы пользователи могли принимать условия и подключаться к Интернету.

2b - Если заставка запрашивается фоновым или неинтерактивным приложением, процесс останавливается здесь

У нас нет проблем с другими веб-сайтами, которыми мы управляем с помощью haproxy, но наша заставка постоянно увеличивает количество текущих соединений, и это реальная проблема. Мы перепробовали много вещей, но безуспешно: - опция server-http-close - опция forceclose

Без эффектов на этой веб-странице! Нам нужна помощь, потому что, вероятно, есть одна вещь, которую мы не понимаем. У кого-нибудь есть идея?

0 ответов

Другие вопросы по тегам