Nginx
Nginx
1. 应用服务器集群
搭建应用服务器集群存在哪些问题?
- 如何将某一时刻请求均分到后端服务集群中某一个节点 负载--->均衡
- 如何实现应用服务器集群环境中session共享问题
- tomcat之间session同步
- 使用redis或cachedb实现session共享(推荐)
2. 安装Nginx
2.1 Nginx的引言
Nginx
是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
2.2 Nginx的安装
# 1.安装必要依赖
yum install -y gcc pcre-devel zlib-devel
# 2.下载nginx
https://nginx.org/en/download.html
# 3.将nginx上传到linux,并解压缩
tar -zxvf nginx-1.18.0.tar.gz
# 4.查看Nginx安装目录
auto CHANGES.ru configure html man src
CHANGES conf contrib LICENSE README
# 5.在Nginx安装目录中执行如下命令:(指令安装位置)
./configure --prefix=/usr/nginx
# 6.执行上述命令后,执行如下命令:
make && make install
# 7.编译完成后进行编译安装目录/usr/nginx目录中查看:
conf html logs sbin
# 8.启动nginx,进入nginx安装目录sbin目录中执行:
./nginx
# 9.在windows中浏览器访问,可以看到nginx欢迎界面:
localhost
注意:关闭网络防火墙或者开放80端口
# 10.关闭nginx,进入nginx安装目录的sbin目录中执行:
./nginx -s stop
# 11.改变配置想让它生效而不停止服务
nginx -t; nginx -s reload
# 12.nginx配置文件在nginx安装目录的conf目录中
3.负载均衡配置
# 1.在多台机器上启动tomcat,都能看到主页则代表启动成功:
http://ip1:8080/
http://ip2:8080/
http://ip3:8080/
# 2.修改tomcat1端口号(伪分布式)
vim tomcat/tom1/conf/server.xml,修改如下内容
a.<Server port="8001" shutdown="SHUTDOWN">
b.<Connector port="8989" protocol="HTTP/1.1"
c.<Connector protocol="AJP/1.3"
address="::1"
port="10010"
redirectPort="8443" />
# 3.修改tomcat2端口号(伪分布式)
vim tomcat/tom1/conf/server.xml,修改如下内容
a.<Server port="8002" shutdown="SHUTDOWN">
b.<Connector port="8990" protocol="HTTP/1.1"
c.<Connector protocol="AJP/1.3"
address="::1"
port="10011"
redirectPort="8443" />
# 4.修改tomcat3端口号(伪分布式)
vim tomcat/tom1/conf/server.xml,修改如下内容
a.<Server port="8003" shutdown="SHUTDOWN">
b.<Connector port="8991" protocol="HTTP/1.1"
c.<Connector protocol="AJP/1.3"
address="::1"
port="10012"
redirectPort="8443" />
# 5.修改nginx配置文件将多个tomcat配置到nginx的配置文件中:
1).vim conf/nginx.conf,在server标签上加入如下配置:
upstream 集群名称 {
server ip1:tomcat端口;
server ip2:tomcat端口;
server ip3:tomcat端口;
}
2).将配置文件中 location /替换为如下配置:
location / {
proxy_pass http://tomcat-servers;
proxy_redirect off;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_next_upstream http_502 http_504 error timeout invalid_header;
}
# 6.进入nginx安装目录sbin目录启动nginx
./nginx -c /usr/nginx/conf/nginx.conf
# 7.访问nginx,看到其中一个tomcat画面:
localhost
4. Nginx负载均衡策略
# 1.轮询
说明:默认策略,每个请求会按时间顺序逐一分配到不同的后端服务器
# 2.weight权重
说明:weight参数用于指定轮询几率,weight的默认值为1,weight的数值与访问比率成正比
upstream tomcat-servers {
server ip1:tomcat端口 weigth=2;
server ip2:tomcat端口;
server ip3:tomcat端口 backup;
}
注意:1.权重越高分配到需要处理的请求越多。
2.此策略可以与least——conn和ip——hash结合使用主要用于后端服务器性能不均。
# 3.ip_hash ip.hash%节点可用数
说明:指定负载均衡器按照基于客户端IP的分配方式,这个方法确保了相同的客户端的请求一直发送到相同的服务器,以保证session会话。这样每个访客都固定访问一个后端服务器,可以解决session不能跨服务器的问题。
upstream tomcat-servers {
ip_hash; #保证每个访客固定访问一个后端服务器
server ip1:tomcat端口;
......
}
# 4.least_conn
说明:把请求转发给连接数较少的后端服务器。轮询算法是把请求平均的转发给各个后端,使它们的负载大致相同;但是,有些请求占用的时间很长,会导致其所在的后端负载较高。这种情况下,least_conn这种方式就可以达到更好的负载均衡效果。
upstream tomcat-servers {
least_conn; #把请求转发给连接数较少的后端服务器
server ip1:tomcat端口;
}
5. 使用Nginx部署多个springboot项目
-
安装好nginx后,修改nginx.conf的配置
server { listen 80; server_name 127.0.0.1; access_log logs/book.log; error_log logs/book.error; #将/blog请求转发给http://127.0.0.1:8011/blog请求转发给http处理 location /wx-service { proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://127.0.0.1:8011/blog请求转发给http; } #将/chat请求转发给http://127.0.0.1:8012/chat处理 location /bootdo { proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://127.0.0.1:8012/chat; } }
-
由于是将不同的请求转发到不同的服务器,所以需要修改项目中的配置文件
server: context-path: /blog