Пробую делать HTTPS GET запрос на сервер, асинхронно, сразу 10. Соединение бесконечное, качается mp4 файл бесконечно. Браузер открывает 6 соединений, а остальные 4 находятся в состоянии pending. Если открыть окно браузера в режиме инкогнито или запустить другой браузер (проверял в Chrome|Opera|FF) и там открыть ещё 10 соединений, то откроются также только 6. Если открыать просто новую вкладку, то ни откроется ни одно соединение, т.к. в соседней вкладке уже висят эти 6 соединений. Если закрыть активное соединение, то откроется соединение, которое было в состоянии pending.
Проверял через скрипт node, там все нормально, хоть 20 хоть 30 одновременно открывается
В логах nginx все чисто, вижу только 6 соединений (ну когда завершаются их видно в access.log со статусом 200). Остальные соединения нигде не регистрируются, ни в error.log ни в access.log, нигде их не видно.
Потом начал tcpdump смотреть на предмет SYN
tcpdump -i eth0 -n tcp and port 443 and src my_remote_ip and "tcp[tcpflags] & (tcp-syn) != 0"
вижу только 4 SYN от браузера. Если запустить 20 конектов через node, то вижу все 20 SYN. Похоже на то, что браузер использует keep-alive.
Отключил я keep-alive в nginx
keepalive_timeout 0;
Теперь в отвере от сервера заголовок Connection: close. Не помогло!
В iptables нет никаких ограничений
Конфиг nginx
user gobot;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
events {
worker_connections 768;
}
http {
server_tokens off;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 0;
types_hash_max_size 2048;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
#cache off
add_header Last-Modified $date_gmt;
add_header Cache-Control 'no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0';
if_modified_since off;
expires off;
etag off;
gzip on;
gzip_disable "msie6";
}
Походу это ограничение в браузерах. Хм, даже не знал
https://stackoverflow.com/questions/985431/max-parallel-http-connections-in-a...
Чепуха какая то!