目录
一、反向代理
实验环境使用windows,侧重原理,其他配置跟linux没有区别
(1)Tomcat Windows版(可以去apache官网下,解压即可)
(2)Nginx windows版(解压即可)
1、简单反向代理
Tomcat
修改conf目录下sever.xml下tomcat的启动端口为8181
在windows下启动tomcat,在bin目录下双击startup.bat即可
如果启动日志乱码,修改conf目录下logging.properties配置文件,添加如下配置
java.util.logging.ConsoleHandler.encoding = GBK
Nginx
修改conf目录下配置文件nginx.conf文件如下
server {
# 监听端口
listen 8080;
server_name localhost;
location / {
# 代理服务器
proxy_pass http://127.0.0.1:8181;
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
启动nginx,访问127.0.0.1:8080效果如下
2、匹配路径反向代理
Tomcat
准备两台tomcat,一台是8181端口,另一台是8282端口
分别在两台服务器webapps目录下创建不同的文件夹edu和app,并创建不同的页面,效果如下:
注意:在一个系统里同时启动多个Tomcat,需要修改Tomcat的多个相关端口
Nginx
修改conf目录下配置文件nginx.conf文件如下
server {
listen 8080;
server_name localhost;
# edu路径
location ~ /edu/ {
proxy_pass http://127.0.0.1:8181;
index index.html index.htm;
}
# app路径
location ~ /app/ {
proxy_pass http://127.0.0.1:8282;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
启动nginx,通过访问127.0.0.1:8080下不同的路径效果如下
Nginx通过路径匹配代理到不同的服务器
Nginx通过路径匹配的相关模式
二、负载均衡
1、负载均衡的作用
转发
转发是负载均衡的核心功能,它能够根据一定的算法,将客户端请求转发到不同应用服务器,缓解每台服务器的压力,提高并发量。
移除故障
当其中一台服务器发生故障时,会被移出轮询队列,客户端请求将会发送到其他几台正常的服务器,不会影响客户端的访问。
恢复添加
当故障的服务器恢复时,会自动被加到轮询队列,继续处理客户端请求。
2、Nginx的配置
(1)轮询
如下是Nginx的基本配置, upstream 配置要负载的节点。nodes名字可以自己取,要跟 server 中 proxy_pass 的 nodes 一致。
server_name 可以是Nginx服务器的ip地址,也可以是域名,根据具体情况配置即可, listen 为端口号。
#负载均衡节点
upstream nodes {
server 127.0.0.1:8181;
server 127.0.0.1:8282;
}
server {
listen 8080;
server_name localhost;
location / {
proxy_pass http://nodes;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
使用以上配置,默认采用轮询的分发策略,即每个请求按时间顺序逐一分配到不同的应用服务器,如果应用服务器down掉,自动剔除,剩下的继续轮询。
测试
准备两台tomcat,一台是8181端口,另一台是8282端口
分别在两台服务器webapps目录ROOT文件夹下创建不同的index.html页面(先清空ROOT文件夹下所有文件),用来区分服务
启动Nginx,多次点击访问127.0.0.1:8080端口,可以看到在不同页面的轮询效果
(2)权重
如果需要为每个请求节点配置不同的权重,可以在地址后面增加权重,配置如下
upstream nodes {
server 127.0.0.1:8181 weight=4;
server 127.0.0.1:8282;
}
通过配置权重,指定轮询几率,权重和访问比率成正比,用于应用服务器性能不均的情况。
weight默认为1,weight越大,负载的权重就越大。
(3)IP哈希算法
还有一种策略是IP哈希算法,请求按访问ip的hash结果分配,这样每个IP固定访问一个应用服务器,可以解决session共享的问题,配置如下
upstream nodes {
ip_hash;
server 192.168.1.11;
server 192.168.1.12;
}
(4)least_conn最少连接
least_conn策略是将web请求分发到连接数最少的服务器上,参考配置如下:
upstream myserver{
least_conn;
server 192.167.40.3:8080;
server 192.167.40.4:8081;
}
(5)fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
fair不是Nginx内置的算法,需要安装第三方的插件才能生效!一般在Ningx中安装!
upstream server_pool{
server 192.168.5.21:80;
server 192.168.5.22:80;
fair;
}
3、负载均衡备份与宕机
(1)备份backup配置
当其他非backup机器挂掉后,才会请求backup机器,参考配置如下:
upstream myserver{
server 192.167.40.3:8080;
server 192.167.40.4:8081 backup;
}
(2)宕机down配置
配置down的服务器不参与负载均衡,这样down所标记的服务器就可以安心的升级了,参考配置如下:
upstream myserver{
server 192.167.40.3:8080;
server 192.167.40.4:8081 down;
}
注:这两个配置很多时候用于运维,维护某个机器的时候
三、动静分离
在项目的部署中 我们将静态资源放到Nginx服务器上、动态资源放到Tomcat服务器上这种就称为动静分离
静态资源和动态资源完全的隔离开、有效的减轻了Tomcat服务器的压力
动静分离的实现
注:本实验使用windows环境实现
准备java工程
准备一个java工程,具备简单的页面访问样式,并在本地启动
访问效果
Nginx配置
在nginx.conf中配置静态资源映射
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
upstream nodes {
# 代理节点
server 127.0.0.1:8888;
}
server {
listen 8080;
server_name localhost;
location / {
proxy_pass http://nodes;
index index.html index.htm;
}
#映射的是非css和js的文件 .表示匹配任意字符 *表示匹配0次或多次 \.对点进行转义
location ~.*\.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$ {
root D:/html;
# 缓存30天
expires 30d;
}
#映射的是css和js的文件
location ~.*\.(js|css)?$ {
root D:/static;
#缓存1小时
expires 1h;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
在映射的路径中配置资源,图片样式映射在html文件夹,css样式映射在static文件夹
注:有时候配置nginx配置文件可能会配置错误,可以访问logs文件夹下的相关日志,查找错误原因
现在,我们启动nginx,访问nginx的127.0.0.1:8080/index,效果如下:
访问nginx上的静态图片资源,127.0.0.1:8080/car.jpg,效果如下:
注:如果在linux上配置,出现403错误,可能需要给文件夹赋权限(755权限)