原文:Nginx学习 – 简书 (jianshu.com)
1.负载均衡种类
第一种:通过硬件负载解决,常见的有NetScaler、F5、Radware和Array等商用的负载均衡器,价格比较昂贵
第二种:通过软件负载解决,常见的软件有LVS、Nginx、apache等,它们是基于Linux系统并且开源的负载均衡策略.
2.介绍
Nginx (engine x) 是一个高性能的HTTP和反向代理服务,也是一个IMAP/POP3/SMTP服务。
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好。
3.nginx应用场景
1)http服务器。Nginx是一个http服务可独立提供http服务。可以做网页静态服务器。
2)虚拟主机。能实现在一台服务器虚拟出多个网站。例如个人网站使用的虚拟主机。
3)反向代理,负载均衡。当网站的访问量达到一定程度后,单台服务器不能满足用户的请求时,需要用多台服务器集群可以使用nginx做反向代理。并且多台服务器可以平均分担负载,不会因为某台服务器负载高宕机而某台服务器闲置的情况。
4.结构图
Nginx负载均衡服务器的nginx.conf
配置注释如下:
events { use epoll; worker_connections 65535; } http { ##upstream的负载均衡,四种调度算法## #调度算法1:轮询.每个请求按时间顺序逐一分配到不同的后端服务器, #如果后端某台服务器宕机,故障系统被自动剔除,使用户访问不受影响 upstream webhost { server 192.168.0.5:6666 ; server 192.168.0.7:6666 ; } #调度算法2:weight(权重).可以根据机器配置定义权重.权重越高被分配到的几率越大 upstream webhost { server 192.168.0.5:6666 weight=2; server 192.168.0.7:6666 weight=3; } #调度算法3:ip_hash. 每个请求按访问IP的hash结果分配,这样来自同一个IP的访客固定访问一个后端服务器, #有效解决了动态网页存在的session共享问题 upstream webhost { ip_hash; server 192.168.0.5:6666 ; server 192.168.0.7:6666 ; } #调度算法4:url_hash(需安装第三方插件).此方法按访问url的hash结果来分配请求, #使每个url定向到同一个后端服务器,可以进一步提高后端缓存服务器的效率. #Nginx本身是不支持url_hash的,如果需要使用这种调度算法,必须安装Nginx 的hash软件包 upstream webhost { server 192.168.0.5:6666 ; server 192.168.0.7:6666 ; hash $request_uri; } #调度算法5:fair(需安装第三方插件).这是比上面两个更加智能的负载均衡算法. #此种算法可以依据页面大小和加载时间长短智能地进行负载均衡,也就是根据后端服务器的响应时间来分配请求, #响应时间短的优先分配.Nginx本身是不支持fair的,如果需要使用这种调度算法,必须下载Nginx的upstream_fair模块 ####虚拟主机的配置(采用调度算法3:ip_hash) server { listen 80; server_name mongo.demo.com; #对 “/” 启用反向代理 location / { proxy_pass http://webhost; proxy_redirect off; proxy_set_header X-Real-IP $remote_addr; #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #以下是一些反向代理的配置,可选. proxy_set_header Host $host; client_max_body_size 10m; #允许客户端请求的最大单文件字节数 client_body_buffer_size 128k; #缓冲区代理缓冲用户端请求的最大字节数, proxy_connect_timeout 90; #nginx跟后端服务器连接超时时间(代理连接超时) proxy_send_timeout 90; #后端服务器数据回传时间(代理发送超时) proxy_read_timeout 90; #连接成功后,后端服务器响应时间(代理接收超时) proxy_buffer_size 4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小 proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的设置 proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2) proxy_temp_file_write_size 64k; #设定缓存文件夹大小,大于这个值,将从upstream服务器传 } } } 配置 192.168.0.4(Nginx-Server) 创建文件夹准备存放配置文件 $ mkdir -p /opt/confs $ vim /opt/confs/nginx.conf events { use epoll; worker_connections 65535; } http { upstream webhost { ip_hash; server 192.168.0.5:6666 ; server 192.168.0.7:6666 ; } server { listen 80; server_name mongo.demo.com; location / { proxy_pass http://webhost; proxy_redirect off; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $host; client_max_body_size 10m; client_body_buffer_size 128k; proxy_connect_timeout 90; proxy_send_timeout 90; proxy_read_timeout 90; proxy_buffer_size 4k; proxy_buffers 4 32k; proxy_busy_buffers_size 64k; proxy_temp_file_write_size 64k; } } } 启动负载均衡服务器192.168.0.4(Nginx-Server) //配置 192.168.0.5(Nginx-Node1/Nginx-Web1) //创建文件夹用于存放web页面 $ mkdir -p /opt/html $ vim /opt/html/index.html //编辑内容如下: The host is 192.168.0.5 - Node 1 启动192.168.0.5(Nginx-Node1/Nginx-Web1) //配置192.168.0.7(Nginx-Node2/Nginx-Web2) //创建文件夹用于存放web页面 $ mkdir -p /opt/html $ vim /opt/html/index.html //编辑内容如下: The host is 192.168.0.7 - Node 2 启动192.168.0.7(Nginx-Node2/Nginx-Web2)
-
windows下nginx配置
1、多台服务器中挑选一台作为nginx代理服务器,其他服务器作为应用服务器(本地IIS测试,三个站点),如下图所示:
2、我们在nginx代理服务器上,首先安装nginx,我们首先去nginx官网下载安装包,如下图所示:
官方站点下载地址
3、将安装包解压到D盘根目录下,文件的目录结构,如下图所示:
4、找到nginx安装目录下的conf文件下的nginx.conf,默认访问端口是8080,如下图所示:
注:如果是80端口,请先关闭IIS的默认80端口
5、我们可以添加如下配置节
#IIS配置多台Server,weight是权重,权重越大,被访问的几率越大 upstream iis_server{ server 127.0.0.1:801 weight=1; server 127.0.0.1:802 weight=1; server 127.0.0.1:803 weight=1; }
接下来我们修改端口为8080,然后在location配置节下配置代理地址已经静态的目录,如下图所示:
location / { root html; index index.html index.htm; #iis_server代理地址 proxy_pass http://iis_server; }
7、设置字符集,以防止中文字符乱码,如下图所示:
8、进入到nginx根目录,使用命令提示符关闭和重新启动nginx.
9、然后我们通过nginx代理服务地址访问,可以看到内容是随机访问3台服务器上的,如果我们有多台服务器,在这多台服务器上部署相同的应用,就可以达到负载均衡的目的,如下图所示:
-
Linux下nginx配置
1.安装nginx(服务器1)
1)首先安装好编译环境
[root@VM_0_10_centos tmp]# yum -y install gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel
2)解压nginx并切换到解压目录
[root@VM_0_10_centos tmp]# tar -zxf nginx-1.16.1.tar.gz [root@VM_0_10_centos tmp]# cd nginx-1.16.1/ [root@VM_0_10_centos nginx-1.16.1]# pwd /tmp/nginx-1.16.1
创建nginx的临时文件,存放在/var/tmp/nginx
[root@VM_0_10_centos nginx-1.16.1]# mkdir -p /var/tmp/nginx #执行命令 ./configure \ --prefix=/usr/local/nginx \ --pid-path=/var/run/nginx/nginx.pid \ --lock-path=/var/lock/nginx.lock \ --error-log-path=/var/log/nginx/error.log \ --http-log-path=/var/log/nginx/access.log \ --with-http_gzip_static_module \ --http-client-body-temp-path=/var/tmp/nginx/client \ --http-proxy-temp-path=/var/tmp/nginx/proxy \ --http-fastcgi-temp-path=/var/tmp/nginx/fastcgi \ --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \ --http-scgi-temp-path=/var/tmp/nginx/scgi \ --with-http_stub_status_module \ --with-http_ssl_module \ --with-http_realip_module
#编译源码,安装nginx [root@VM_0_10_centos nginx-1.16.1]# make [root@VM_0_10_centos nginx-1.16.1]# make install
安装完成,查看安装目录
[root@VM_0_10_centos nginx]# cd sbin/ [root@VM_0_10_centos sbin]# ./nginx -c /usr/local/nginx/conf/nginx.conf #查看nginx进程是否启动 [root@VM_0_10_centos sbin]# ps -aux | grep nginx
注意:其中master为主进程worker为工作进程
5)退出nginx
1 [root@VM_0_10_centos sbin]# ./nginx -s quit
6)重启nginx
1 [root@VM_0_10_centos sbin]# pwd 2 /usr/local/nginx/sbin 3 [root@VM_0_10_centos sbin]# ./nginx -s reload
7)测试nginx
在浏览器上通过ip访问:http://localhost,出现如下界面即成功
2.安装tomcat服务(服务器1,服务器2)
查看服务端口进程是否启动
1)修改配置文件nginx.conf
[root@VM_0_10_centos ~]# cd /usr/local/nginx/conf/ [root@VM_0_10_centos conf]# vi nginx.conf
配置负载均衡,配置完保存并退出
#20190827添加 upstream testTomcat{ #设置分权,权重越高优先访问 server 106.53.73.200:8888 weight=1; server 182.254.184.102:8888 weight=1; } server { listen 80; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; #所有请求都在这里去找分配 location / { #root html; index index.html index.htm; #使用test分配规则,即刚刚自定义添加的upstream节点 proxy_pass http://testTomcat/test/; } }
重新启动nginx服务
1 [root@VM_0_10_centos conf]# /usr/local/nginx/sbin/nginx -s reload
2)测试负载均衡
通过浏览器访问负载ip,出现下图即负载成功