本文主要对实现以下功能的nginx配置文件一些配置属性进行解释;

一、功能:负载均衡+https服务 + client-nginx-server长连接配置

1、访问:http://localhost/test请求实现负载均衡;

长连接负载均衡问题 长连接 负载均衡_长连接负载均衡问题


长连接负载均衡问题 长连接 负载均衡_长连接_02


长连接负载均衡问题 长连接 负载均衡_nginx_03

2、利用nginx搭建https服务;

长连接负载均衡问题 长连接 负载均衡_长连接_04

3、client-nginx-server长连接配置,client-nginx长连接;nginx-server长连接;

4、如果nginx-server未配置长连接,server会出现大量TIME_WAIT,如果client-nginx未使用长连接,nginx出现大量TIME_WAIT

#下面两个参数如果设置过小,nginx主动发起四次挥手销毁连接,造成nginx出现大量的TIME_WAIT
keepalive_timeout 75; #设置keep-alive客户端连接在服务器端保持开启的超时值;值为0会禁用keep-alive客户端连接;
keepalive_requests 100; #设置一个keep-alive连接上可以服务的请求的最大数量,当最大请求数量达到时,连接被关闭。默认是100。

二、nginx.conf配置文件,对于每个属性有相应的解释

#nginx.conf配置文件#user  nobody;
worker_processes  1; #工作进程:数目。根据硬件调整,通常等于CPU数量或者2倍于CPU。

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;     #错误日志:存放路径。

#pid        logs/nginx.pid;      #pid(进程标识符):存放路径。

events {
    worker_connections  1024;     
#指定一个nginx进程可以打开的最大描述符:数目。理论值应该是最多打开文件数(ulimit -n)与nginx进程#数相除,但是nginx分配请求并不是那#么均匀,#所以最好与ulimit -n 的值保持一致。
#如果并发量比较高的情况下,有可能请求超过工作连接上限;502错误
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;  
#对于普通应用,必须设为on。如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络#IO处理速度,降低系统uptime。
    #tcp_nopush     on;

    #keepalive_timeout  0;
    #如果设置过小,nginx主动发起四次挥手销毁连接,造成nginx出现大量的TIME_WAIT
    keepalive_timeout  75;  #设置keep-alive客户端连接在服务器端保持开启的超时值;值为0会禁用keep-alive客户端连接;
    keepalive_requests 100;  #设置一个keep-alive连接上可以服务的请求的最大数量,当最大请求数量达到时,连接被关闭。默认是100。
   

    #gzip  on;
	
    #upstream上流即后端服务器,
    #目前支持4种方式的分配
    #轮询(down自动剔除,不参与负载均衡)、权重(性能不均)、
    #hash(每个请求按访问ip的hash结果分配,每个访客固定到一个一个后端服务器,解决session问题)
    #fair根据响应时间进行分配,响应时间短的优先分配
    #url_hash:根据url的hash结果来分配请求;每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。

   upstream backend {    
    server localhost:8080 down weight=1;
    server localhost:8081 weight=5;
    server localhost:8082 weight=10 backup;
   }
   #可以对每一个后端服务器设置状态 
   #down表示单前的server暂时不参与负载
   #weight为weight越大,负载的权重就越大
   #max_fails:允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream模块定义的错误
   #fail_timeout:max_fails次失败后,暂停的时间。
   #backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。

    # another virtual host using mix of IP-, name-, and port-based configuration
    #
   #http服务,监听80端口
    server {
        listen       80;   #配置监听端口
        server_name  localhost;   #配置访问域名,localhost可以根据host设置域名,这边server_name设置为host中对应的域名
        
   #location ~* \.(mp3|exe)$ {undefined  对以“mp3或exe”结尾的地址进行负载均衡

        location / {
            root   html;
            index  index.html index.htm; 
            proxy_pass http://backend;   #80端口的请求将会进行负载均衡  设置被代理服务器的端口或套接字,以及URL
            proxy_http_version 1.1;         #设置nginx和后端服务器之间的http版本,因为1.1才支持长连接 
            proxy_set_header Connection ""; #请求清理从client过来的http header,及时client-nginx是短连接,nginx-server也可以是长
        }
    }

    # 我们在ngnix上面配置了https
server {
     listen       443 ssl;
     server_name  localhost;

     #增加ssl
     #ssl on;  #如果强制HTTPS访问,这行要打开 
     #server.crt(证书签名文件CA文件)的路径
     ssl_certificate      D:\\java\\ngnix\\nginx-1.20.2\\nginx-1.20.2\\conf\\ssl\\server.crt; 
     #server_nopwd.key(私钥)服务器私钥的路径
     ssl_certificate_key  D:\\java\\ngnix\\nginx-1.20.2\\nginx-1.20.2\\conf\\ssl\\server_nopwd.key;

     #指定缓存大小为1m
     ssl_session_cache    shared:SSL:1m;
     #指定缓存时间为1分钟
     ssl_session_timeout  1m;
     #关闭默认开启的ssl_session_tickets
     ssl_session_tickets off;

     #设定支持的TLS协议版本
     ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
     #配置密码套件
     ssl_ciphers  HIGH:!aNULL:!MD5:!ADH:!RC4:!DH:!DHE:!ECDHE;
     ssl_prefer_server_ciphers  on;

     location / {
         #root   html;
         #index  index.html index.htm;
         proxy_pass http://127.0.0.1:8080;
     }
 }
}