本人安装的是 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软件包。