Nginx优化之长连接https负载均衡

    科技2022-08-27  105

    关于keepalive

    有时我们需要用到nginx的 反向代理 (比如:跨域),此时需要“长连接”!其注意事项有两点:

    从client到nginx的连接是长连接从nginx到server的连接时长连接

    默认情况下,nginx已经开启了对client的keepalive支持,但一些场景下,仍然需要我们手动调整参数重写一下:

    http{ keepalive_timeout 超时值 响应header; keepalive_request 数量值; }

     

    代码中:

    超时值——keepalive客户端连接在服务器端保持开启的超时值(默认75s),值为0时,将禁用keepalive连接;响应header——(可选)在响应的header域中设置一个值 Keep-Alive:timeout=time;数量值——设置一个keepalive连接上可以服务的请求的最大数量(当达到值时,连接被关闭(默认值100))

    保持和server的长连接

    默认nginx访问后端都是短连接(也就是“典型的HTTP1.0”),为了让nginx和后端server之间保持长连接,可以如下配置:

    http{ upstream BACKEND{ server 192.168.0.1:8080 weight=1 max_false=2 fail_timeout=30s; server 192.168.0.2:8080 weight=1 max_false=2 fail_timeout=30s; keepalive 300; } server{ listen 8080 default_server; server_name:""; location /{ proxy_pass http://BACKEND proxy_set_header Host $Host; proxy_set_header x-forwarded-for $remote_addr; proxy_set_header X-Real-IP $remote_addr; add_header Cache-Control no-store; add_header Pragma no-cache; proxy_http_version 1.1; //很重要! proxy_set_header Connection ""; } } }

     

    代码中:

    (第17行)proxy_http_version 1.1; 最好写上,因为http长连接的支持是从1.1版本后才有的;upstream中的keepalive——此时不表示超时,也不是前面说的单次请求最大连接数(keepalive_request),而是设置upstream服务器的空闲keepalive连接的最大数量。

    nginx官方上说:当这个数量被突破时,最近使用次数最少的链接将被关闭(译)

    nginx配置HTTPS

    server{ listen 80 default_server; listen 443 ssl; server_name cjxnsb.cn; root /mxc/UCgzs; index 1.html 2.html 3.html; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_certificate /usr/local/nginx/conf/server.pem; ssl_certificate_key /usr/local/nginx/conf/server.key; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; ssl_ciphers ALL:!kEDH!ADH:RC4+RSA:+HIGH:+EXP; ssl_prefer_server_ciphers on; ... }

     

    第13行:ssl_ciphers ALL:!kEDH!ADH:RC4+RSA:+HIGH:+EXP;是nginx的优化之一:删去效率低下的kEDH加密算法!

    Nginx负载均衡

    当一个域名指向多台web服务器,添加一台nginx负载均衡服务器,将客户端请求“平均”发送给每台web服务器,避免单台服务器因负载过高而其余服务器空闲而出现的损失

    新建配置文件:

    vi /etc/nginx/conf.d/test.conf  

    添加内容:

    upstream test{ #有多个文件,此处配置多个(test——自定义名) ip_hash; server 192.168.0.1:80 weight=100; server 192.168.0.2:80 weight=50; } server{ listen 80; server_name cjxnsb.cn; location /{ proxy_pass http://test; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } upstream:负载均衡配置项ip_hash:将同一客户端的所有请求发送给同一服务器(如不发送给同一服务器,有可能出现客户端刚登陆网站,点击其他子页面又提示登陆)server:web服务器地址proxy_pass:引用upstream定义的名称(如上面代码中的“test”)

    upstream配置多个,则下面location /前面要添加对应数量的location ~ 配置名 内部写法和location / 里异曲同工

    然后,重载nginx配置:

    nginx -t #一般都要先写这个——验证nginx配置更新 nginx -s reload #重载

     

    Processed: 0.014, SQL: 9