Nginx在windows环境下的安装、负载均衡设置
公司要提供面向全行业用户的数据查询服务。所有数据来自另一个系统(交换共享平台,以相关查询接口方式提供),我们自建后台服务做中转,通过调用交换共享平台的接口获取数据,为前端的APP、PC版系统等提供数据。考虑到用户并发访问对后台服务所在应用服务器的压力问题(暂不考虑对交换共享平台的压力,实际这里的压力更大),准备通过nginx进行负载均衡。先期考虑使用2台webserver,分别部署后台服务分散压力。本文对nginx的安装部署等设置进行记录。
1、首先了解一下nignx是干嘛的:常用nginx做这2件事:反向代理、负载均衡。应该还有动静资源分离、正向代理之类的,暂时不表。
a、反向代理:就是以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。就白了就是当内网的服务器不能被直接访问时,我们可以在外网服务器架设nginx作为代理(要求nginx所在的外网服务器得能够访问到内网服务器)。
b、负载均衡:把访问nginx的请求,根据配置随机分配到不同的真实服务器上,达到负载均衡的目的。说白了就是外部请求统一访问nginx,nginx会把压力分散到各个服务器上,避免只请求一台服务器把服务器拖死。看到这我想大家应该会想到这种随机分配机制应该会有session的问题,一会访问A服务器一会访问B服务器的,session不乱了么?当然nginx有自己的应对策略了,这里先不表。
2、安装部署
a、从官网下载:http://nginx.org/en/download.html ,建议选择稳定版吧,那个mainline version就相当于是开发版。
b、下载完了就是个不大的zip包,直接解压到某个文件夹下就能用了,简单吧。
c、cmd下到该目录,运行nginx。
报1113错误,恭喜你,nginx目录文件夹有中文,不支持。换个全英文的目录再试试吧。
没错误了,去浏览器里看看。这就行了。如果还有错多半是端口的问题,默认配置是80端口,得在\nginx-1.16.1\conf目录下改一下nginx.conf文件。我的是改成8080端口了,因为iis默认占用80端口。
3、负载均衡配置
a、打开nginx.conf文件,在server配置节之前加入upstream配置节,该配置表示会把访问localhost:8080的请求,随机转发到localhost:1111与localhost:2222下,随机权重由weight指定(值越高,表示被访问到的几率越高)。这里为了测试,使用本机的不同端口,实际可以改为正式的服务地址。proxy_pass别忘了跟upstream对应好。
b、在iis服务器上部署两个网站,一个用1111端口,一个用2222端口。默认页面分别显示“I am server 1111”、“I am server 2222”。
c、重新加载nginx配置,使得我们的配置生效:
d、到浏览器里访问一下“http://loclahost:8080”,你会发现访问被随机转发到1111或2222服务器上了。刷一下,页面就在1111与2222之间变化。OK,成功了。
e、最前面不是说过session的问题么?nginx提供了一种简单的基于请求端ip地址的分配机制:即保证来自同一个ip地址的请求,每次都会分配到固定的服务器上去。例如,假设第一次请求被分配到1111服务器,则下次请求还是会访问1111服务器,不会访问2222服务器,这样session就不会乱了。配置很简单,加入ip_hash配置项即可:
f、我们让nginx重新加载配置,再刷新http://localhost:8080/,发现不管怎么刷新页面,都是显示“I am server 1111”,说明策略生效了。当然,网上还有使用redis配合实现session共享的方案,可自行百度。