一、原理:
nginx可以实现负载均衡。客户端请求nginx服务器,nginx服务器代理请求后端web服务器组。nginx请求服务器组时,会根据某种规则(如ip轮询)实现服务器组的均衡访问。
从层次上来看,如果客户端是第一层,nginx是第二层,后端服务器组是第三层。那么对于客户端来说,其是不知道后边的两层的,客户端只需要访问nginx即可得到响应。
二、nginx.conf配置
notes:
1、upstream属性:
upstream 后端服务器组名{
server 服务器一IP:PORT;
server 服务器二IP:PORT;
}
upstream属性定义了后端服务器组。后端服务器组名可以任意。
upstream属性除了可以配置后端服务器组各服务器的ip:port外,还可以配置分发请求的策略:
1)、分别给各服务器设置权重weight,值越高,访问几率越大;
2)、给服务器组设置ip_hash;属性,nginx会根据客户端的ip来分发请求,每一个客户端(ip相同)会访问固定的后端服务器。
3)、其他。
2、server属性:
listen和server_name属性定义了nginx的监听端口和监听域名。只有当客户端访问这一域名时,nginx才会处理请求。
此属性是客户端关心的。
注意,该域名是访问nginx的域名,而不是访问web服务的域名。域名访问可以通过配置hosts文件或者搭建DNS服务器实现。
location属性:location属性后边紧跟的“/”是对访问路径的匹配策略,暂不做具体介绍。
重要的是内部的proxy_pass属性,该属性值设定了要访问的后端服务器组名,
格式为http://后端服务器组名(该后端服务器组名要与上边upstream中的后端服务器名一致)。
此属性是客户端不关心的。
三、配置过程中遇到的困惑:
第一次使用nginx,遇到一些问题。一开始想不通,想开了就很简单。
我要搭建的项目是内网项目,都是通过内网IP:PORT/项目路径的格式访问的,如http://192.168.30.111:8080/shopping
/com_shop/index.jsp。一开始想的是通过修改nginx的配置文件来实现由nginx直接定向到该地址,但是如上nginx的配
置文件中只在upstream中配置了后端服务器的IP和端口号,在proxy_pass指向前边的upstream。而没有对项目路径的设定。
其实问题换种角度思考就可以解决了。nginx实现不了(我暂时没有实现)直接定位,可以由访问后端服务器IP:PORT
时展示的HTML或者jsp实现重定向。
例如对于tomcat启动的服务,访问IP:PORT时会定位到tomcat欢迎界面,只需要在这个界面实现重新定位即可。
另外一种方式,将要访问的界面设置为tomcat的默认访问界面,实现方式为修改server.xml中的<Context>的path
属性。详见《tomcat部署服务的几种方式》。