本人安装的是 windows 1.17.2 的 nginx 版本,其中实现负载均衡主要通过配置 nginx.conf 文件进行实现

先说明一下默认情况下 nginx.conf 配置文件的内容

#user  nobody; 主模块指令,指定Nginx Worker进程运行用户以及用户组,默认由nobody账号运行。
worker_processes  1; 主模块指令,指定了Nginx要开启的进程数。每个Nginx进程平均耗费10M~12M内存。建议指定和CPU的数量一致即可。

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info; 主模块指令,用来定义全局错误日志文件。日志输出级别有debug、info、notice、warn、error、crit可供选择,其中,debug输出日志最为最详细,而crit输出日志最少。

#pid        logs/nginx.pid; 主模块指令,用来指定进程pid的存储文件位置

events {  
    worker_connections  1024; 事件模块指令,用于定义Nginx每个进程的最大连接数,默认是1024。最大客户端连接数由worker_processes和worker_connections决定,即Max_client=worker_processes*worker_connections
}

http {
    include       mime.types; 主模块指令,实现对配置文件所包含的文件的设定,可以减少主配置文件的复杂度
    default_type  application/octet-stream; HTTP核心模块指令,这里设定默认类型为二进制流,也就是当文件类型未定义时使用这种方式,用浏览器访问PHP文件就会出现下载窗口

    #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; HttpLog模块指令,用于指定Nginx日志的输出格式。main为此日志输出格式的名称,可以在下面的access_log指令中引用。

    sendfile        on; 开启高效文件传输模式。将tcp_nopush和tcp_nodelay两个指令设置为on用于防止网络阻塞
    #tcp_nopush     on;

    #keepalive_timeout  0; 
    keepalive_timeout  65; 设置客户端连接保持活动的超时时间。在超过这个时间之后,服务器会关闭该连接

    #gzip  on; 设置开启或者关闭gzip模块,“gzip on”表示开启GZIP压缩,实时压缩输出数据流;

    server { 标志定义虚拟主机开始
        listen       80;  nginx 监听端口
        server_name  localhost;
        #charset koi8-r; 设置网页的默认编码格式
        #access_log  logs/host.access.log  main; 指定此虚拟主机的访问日志存放路径,最后的main用于指定访问日志的输出格式。

        location / {
            root   html;  用于指定虚拟主机的网页根目录,这个目录可以是相对路径,也可以是绝对路径
            index  index.html index.htm;  设定访问的默认首页地址
        }

        #error_page  404              /404.html;
        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server { 可以多个server进行配置
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

    # HTTPS server
    #
    #server {
    #    listen       443 ssl; https配置
    #    server_name  localhost;

    #    ssl_certificate      cert.pem; SSL pem证书路径
    #    ssl_certificate_key  cert.key; SSL key证书路径

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}
}

负载均衡配置
IIS上已部署了两个站点用于转发的服务端


分别访问,页面分别显示 001,002 字样用于区分

http{
    server {
        listen       8080;
        server_name  localhost;
        location / {
            proxy_pass http://balancingName;
            
            #设置可使转发的服务端获取到客户端请求的真实ip地址
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Real-Port $remote_port;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }

	upstream balancingName{
            ip_hash;
	    server 192.168.50.3:8001;
	    server 192.168.50.3:8002;
	    #server 192.168.50.3:8002 weight=1;
	    #server 192.168.50.3:8002 backup; 
	} 
}

效果如下

Nginx的负载均衡模块目前支持4种调度算法,下面进行分别介绍,其中后两项属于第三方的调度方法。
如果后端某台服务器宕机,故障系统被自动剔除,使用户访问不受影响
轮询(默认):每个请求按时间顺序逐一分配到不同的后端服务器;
weight:指定轮询权值,Weight值越大,分配到的访问机率越高,主要用于后端每个服务器性能不均的情况下;
ip_hash:每个请求按访问IP的hash结果分配,这样来自同一个IP的访客固定访问一个后端服务器,有效解决了动态网页存在的session共享问题;

fair:比上面两个更加智能的负载均衡算法。此种算法可以依据页面大小和加载时间长短智能地进行负载均衡,也就是根据后端服务器的响应时间来分配请求,响应时间短的优先分配。Nginx本身是不支持fair的,如果需要使用这种调度算法,必须下载Nginx的upstream_fair模块;
url_hash:按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,可以进一步提高后端缓存服务器的效率。Nginx本身是不支持url_hash的,如果需要使用这种调度算法,必须安装Nginx 的hash软件包。