nginx是专门用于反向代理的服务器
Nginx 本身用来处理静态资源 在 HTML文件夹
tomcat
打开 Tomcat安装路径/conf/service.conf
location可以配置好多个,从而代理到多个服务器上的tomcat
一个server {}块 对应一个域名
修改默认端口
<!--第1处-->
<Server port="18005" shutdown="SHUTDOWN">
<!--第2处-->
<Connector port="18080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<!--第3处-->
<Connector port="18009" protocol="AJP/1.3" redirectPort="8443" />
访问 http://localhost/18080
如若访问不成功
1. 防火墙 (添加规则或关闭)CentOS7 systemctl stop firewalld.service
2. 安全组 (我的阿里云服务器有安全组功能)
Nginx
报一个错
代理路径加上 http://
输入 www.junhao.art 访问成功
Linux 两个Tomcat
在Linux 的tomcat安装位置复制成两个tomcat改端口
修改环境变量
##########first tomcat###########
CATALINA_BASE=/usr/local/tomcat01
CATALINA_HOME=/usr/local/tomcat01
TOMCAT_HOME=/usr/local/tomcat01
export CATALINA_BASE CATALINA_HOME TOMCAT_HOME
##########first tomcat###########
##########second tomcat##########
CATALINA02_BASE=/usr/local/tomcat02
CATALINA02_HOME=/usr/local/tomcat02
TOMCAT02_HOME=/usr/local/tomcat02
export CATALINA02_BASE CATALINA02_HOME TOMCAT02_HOME
##########second tomcat##########
source /etc/profile
第二个tomcat的 server.xml设置
第一个tomcat设置成 18080 第二个设置成28080
<!--第1处-->
<Server port="28005" shutdown="SHUTDOWN">
<!--第2处-->
<Connector port="28080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<!--第3处-->
<Connector port="28009" protocol="AJP/1.3" redirectPort="8443" />
进入tomcat02/bin,打开catalina.sh,将所有的CATALINA_BASE改为CATALINA02_BASE,
将所有CATALINA_HOME改为CATALINA02_HOME,保存。
Nginx+Tomcat搭建高性能负载均衡集群
将工作负载分布到多个服务器来提高网站、应用、数据库或其他服务的性能和可靠性。
http {
# weight默认为1,将请求平均分配给每台server
# 上例配置,表示6次请求中,100分配2次,101分配3次,102分配1次
upstream tomcats {
server 192.168.0.100:8080 weight=2; # 2/6次
server 192.168.0.101:8080 weight=3; # 3/6次
server 192.168.0.102:8080 weight=1; # 1/6次
}
server {
listen 80;
location / {
proxy_pass http://tomcats;
}
}
# ... 省略其它配置
}
启动
nginx是80端口
几个tomcat是自定义端口 不能冲突
Linux下Tomcat修改favicon.ico图标
最后看一下有无权限运行
chmod 777 *.sh
Nginx 限流
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=100r/s;
location /service {
limit_req zone = mylimit burst=20 nodelay;
proxy_pass http://tomcats;
}
1、配置参数
limit_req_zone定义在http块中,$binary_remote_addr 表示保存客户端IP地址的二进制形式。
Zone定义IP状态及URL访问频率的共享内存区域。zone=keyword标识区域的名字,以及冒号后面跟区域大小。16000个IP地址的状态信息约1MB,所以示例中区域可以存储160000个IP地址。
Rate定义最大请求速率。示例中速率不能超过每秒100个请求。
2、设置限流
burst排队大小
- burst=20, (我们短时间内发送了大量请求,Nginx按照毫秒级精度统计,超出限制的请求直接拒绝。这在实际场景中未免过于苛刻,真实网络环境中请求到来不是匀速的,所以有缓冲区)burst爆发的意思,这个配置的意思是设置一个大小为20的缓冲区当有大量请求(爆发)过来时,超过了访问频次限制的请求可以先放到这个缓冲区内。
- nodelay,如果设置,让缓冲区排队的请求立即执行;超过访问频次而且缓冲区也满了的时候就会直接返回503,如果没有设置,则所有请求会等待排队。
nginx处理的时候是做时间切片的, rate= 100r/s , 这样nginx就是将1s切成100个时间片段,在一个时间片段里面,只能处理一个请求。
也就是说:10ms能处理一个请求。我们在假设你的接口很快可以1ms就返回。那在剩余的9ms内,nginx在接到任何请求就会直接被限速掉了返回503。为了解决这个问题,你可以增加burst的值,让在9ms内的请求,nginx先接住不处理,等10ms的时间片结束,就会从等待的队列中拿出一个请求来继续处理。这样对用户来说就友好了(但是耗时会延长)。
burst如果队列设置的比较大,请求排队的时间就会比较长,用户角度看来就是RT变长了。服务器若处理不了巨量请求,直接拒绝用户的请求,这就成了漏桶算法