linux下websocket连接优化

/ 默认分类 / 没有评论 / 6浏览

优化tcp/ip

cat >> /etc/sysctl.conf << EOF
# WebSocket 必备优化
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
net.ipv4.ip_local_port_range = 1024 65535
net.core.somaxconn=65535
net.ipv4.tcp_max_syn_backlog=16384
EOF

生效

sysctl -p

修改 /etc/security/limits.conf,

*    soft    nofile    1048576
*    hard    nofile    1048576

nginx配置

user root;
worker_processes auto;
# 每个 worker 的 fd 上限
worker_rlimit_nofile 65536;  
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
include /usr/share/nginx/modules/*.conf;

events {
	# 每个 worker 最大连接,调高到 4096(总连接 ≈ 8*4096=32k > 10000)
    worker_connections 4096;
	# 同时接受多个连接
	multi_accept on;  
	# Linux 用 epoll(高效多路复用)
    use epoll;  
	# 使用epoll 关掉惊群保护锁
	accept_mutex off; 
}

http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
					  'Accept-encoding "$http_accept_encoding"'
					  'X-Request-With "$http_x_request_with"'
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for" "$http_authorization"';

    access_log  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 4096;
	# ③ 加大缓冲,减少 slow system call
	proxy_buffers 32 64k;
	# ④ 首包更大,握手更快	
    proxy_buffer_size 128k;            
    proxy_busy_buffers_size 128k;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;
    include /etc/nginx/conf.d/*.conf;


	server {
	
		listen       443 ssl http2;
        server_name  sh.ixiatiao.com;
        ssl_certificate "/etc/nginx/cert/sh.server.crt";
        ssl_certificate_key "/etc/nginx/ert/sh.server.key";
        ssl_session_cache shared:SSL:1m;
        ssl_session_timeout  10m;
        ssl_ciphers HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers on;
		ssl_stapling on;
		ssl_stapling_verify on;
		resolver 8.8.8.8 8.8.4.4 223.5.5.5 119.29.29.29 valid=86400s;
		resolver_timeout 5s;
        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;
		gzip on;
		gzip_types text/css text/javascript text/xml text/plain text/x-component application/javascript application/json application/xml application/rss+xml font/truetype font/opentype application/vnd.ms-fontobject image/svg+xml;
		
		# WebSocket 代理
        location ^~ /user/session {
            proxy_pass http://127.0.0.1:9981/user/session;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "Upgrade";
            proxy_set_header Host $http_host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
			# ⑥ 清除 Connection 头,让后端完全接管
			proxy_set_header Connection "";
			# 防止长时间连接超时
            proxy_read_timeout 86400; 
        }
    }
}