Como limitar as conexões TCP com nginx para HTTP / 2?

1

Eu quero usar o nginx como um frontend https e estou procurando uma maneira de limitar as conexões TCP. Estes limites devem ser baseados nos endereços IP remotos e funcionar para HTTP / 1.1 , bem como HTTP 2 .

Para HTTP / 1.1 eu pensei que estaria bem em torno de 15 conexões simultâneas por IP (já que a maioria dos navegadores parece usar no máximo 6), o que deve ser mais que suficiente para HTTP / 2 . Mas os documentos nginx afirmam:

In HTTP/2 and SPDY, each concurrent request is considered a separate connection.

E a especificação HTTP / 2 informa sobre o parâmetro SETTINGS_MAX_CONCURRENT_STREAMS :

It is recommended that this value be no smaller than 100, so as to not unnecessarily limit parallelism.

Isso significa que devo permitir pelo menos 100 conexões por IP remoto? Parece que sim nos meus testes, mas talvez eu esteja perdendo alguma coisa. Porque isso significa essencialmente que não posso definir qualquer significativo limites para o número de conexões TCP simultâneas, sem limitar seriamente HTTP / 2 .

    
por Brutus 11.09.2017 / 15:57

1 resposta

1

Veja como eu resolvi isso por enquanto:

map $http2 $v1ip {
    default "";
    ""  $binary_remote_addr;
}
map $http2 $v2ip {
    default $binary_remote_addr;
    "" "";
}

limit_conn_zone $v1ip zone=v1ips:10m;
limit_conn v1ips 10;

limit_conn_zone $v2ip zone=v2ips:10m;
limit_conn v2ips 125;

Como o limite de conexão para HTTP / 2 tem que ser tão alto, também adicionei a limitação de taxa ... mas ainda estou aprimorando os valores.

NOTA : enquanto isso permite definir um valor "sensato" para HTTP < 2 conexões, ele ainda requer um número desnecessário - alto - de conexões simultâneas para conexões HTTP / 2. Eu gostaria muito de ver limit_conn para cuidar apenas de conexões TCP e não de solicitações HTTP.

    
por 18.09.2017 / 09:43