Nginx
反向代理
由代理者代替用户访问真实资源的过程称之为反向代理.
核心特点:
- 用户无需关心真实资源的位置
- 代理在内部有专门的配置,实现了路径的映射
nginx介绍
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。
其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
特点:
1.占用内存少 不到2M
2.并发能力强 3万/秒 tomcat 150/秒
3.C语言开发 开源免费 软件负载均衡器
硬件负载均衡器 F5服务器
下载
网址: http://nginx.org/
安装
解压文件,找到exe文件,以管理员身份运行,一闪而过,开启一个主进程,一个守护进程
命令
前提条件:命令执行必须在nginx.exe的根目录中执行.
端口: 80
1.启动nginx start nginx
2.重启nginx nginx –s reload
3.关闭nginx nginx –s stop
反向代理入门
http {
server {
#监听端口号
listen 80;
#监听域名
server_name localhost;
#反向代理的配置 /全部的请求 正则表达式
location / {
#root关键字 目录
root html;
#默认访问页面
index index.html index.htm;
}
}
}
实现图片的反向代理
追加server
# 追加
#配置图片服务器
server {
listen 80;
server_name image.jt.com;
location / {
root D:/1-jt-software/jt-images;
}
}
编辑HOSTS文件
作用:实现本机IP与域名的映射.
路径: C:\Windows\System32\drivers\etc\hosts
#配置IP与域名的映射关系
127.0.0.1 localhost
127.0.0.1 image.jt.com
127.0.0.1 manage.jt.com
127.0.0.1 www.jt.com
127.0.0.1 sso.jt.com
127.0.0.1 cart.jt.com
127.0.0.1 order.jt.com
Nginx实现域名代理
要求用户通过域名http://manage.jt.com:8091,访问真实的服务器localhost:8091.
#配置京淘后台管理系统
server {
listen 80;
server_name manage.jt.com;
location / {
#代理域名的配置项
proxy_pass http://localhost:8091;
}
}
修改完成之后,重启nginx服务器.
搭建tomcat服务器集群
集群作用
主要目的抗击高并发.
动态获取端口号
测试使用
@RestController
public class PortController {
@Value("${server.port}")
private String port;
//如何动态获取当前服务器端口号
@RequestMapping("/port")
public String getPort() {
return "本次访问的端口号为:"+port;
}
}
项目打包部署
说明:工作中的项目都是一个个的jar/war包,之后linux服务器直接部署.
项目打包
导出war包
将war包复制到本地
项目打包问题说明
京淘项目是一个聚合项目.大项目中嵌套小项目.项目名称不匹配
父pom.xml文件中
<project>
.....
<modules>
<module>jt-common</module>
<module>jt-manage</module>
</modules>
</project>
插件引入错误
插件的引入的目的是为了打包部署方便.要求必须有main方法.
子项目中
<!--必须添加插件 -->
<build>
<plugins>
<!--跳过测试类打包 项目打成jar-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
Nginx负载均衡策略
负载均衡说明
一般为了抗击高并发需要搭建tomcat服务器集群.但是如何通过同一个域名访问不同的tomcat服务器???
域名:http://manage.jt.com:80 要求链路到不同的tomcat服务器.
如果想要发挥集群的性能,则必须让每台tomcat服务器都能为用户提供服务.所以必须进行负载均衡.
轮询策略
说明:按照配置文件的顺序依次访问.
配置文件
#配置京淘后台管理系统
server {
listen 80;
server_name manage.jt.com;
location / {
#代理域名的配置项
# 连接集群此行需要注释
# proxy_pass http://localhost:8091;
#连接集群
proxy_pass http://jtWindows;
}
}
#配置tomcat集群, 默认轮询
upstream jtWindows {
server 127.0.0.1:8081;
server 127.0.0.1:8082;
server 127.0.0.1:8083;
}
权重
说明:
按照配置的规则,让性能更优的服务器多处理请求.
业务场景:
2010: 500G I7处理 8G
2019: 2T 8个I9 128G
配置:
#配置tomcat集群 默认轮询
upstream jtWindows {
server 127.0.0.1:8081 weight=6;
server 127.0.0.1:8082 weight=3;
server 127.0.0.1:8083 weight=1;
}
IPHASH策略
一般系统中都会有权限校验.通常情况下会将用户信息保存到服务器的Session中.但是在服务器集群使用时,Session服务器不能共享.
弊端:用户频繁登录的现象.
实现sessionid共享?
URL重写技术
说明:通过nginx动态拼接sessionId.如果sessionId相同,则可以获取相同的用户信息.实现数的共享. Nginx实现session共享.
弊端:会造成nginx代理服务器的压力过高.效率低.
IPHASH技术(慎用)
hash求余
特点:根据用户的IP地址.进行hash运算.将IP地址与服务器进行绑定.从而实现业务功能.
#配置tomcat集群 默认轮询
upstream jtWindows {
ip_hash;
server 127.0.0.1:8081 weight=6;
server 127.0.0.1:8082 weight=3;
server 127.0.0.1:8083 weight=1;
}
弊端:
1.负载不均
2.如果某台服务器宕机,则会影响用户的体检.
SSO单点登录系统(铺垫)
单点登录(SingleSignOn,SSO),就是通过用户的一次性鉴别登录。当用户在身份认证服务器上登录一次以后,即可获得访问单点登录系统中其他关联系统和应用软件的权限,同时这种实现是不需要管理员对用户的登录状态或其他信息进行修改的,这意味着在多个应用系统中,用户只需一次登录就可以访问所有相互信任的应用系统。这种方式减少了由登录产生的时间消耗,辅助了用户管理,是目前比较流行的
用户只需要登录一次,就可以访问相互信任的系统.
Nginx高级
Nignx机制说明
说明:如果nginx做反向代理时,如果遇到服务器发生故障,则会等到超时时间之后,访问下一台服务器.直到访问正常.
Down属性
说明:可以通过配置文件,指定某台服务器宕机,则nginx不会再次访问故障机.
upstream jtWindows {
#ip_hash;
server 127.0.0.1:8081 weight=6 down;
server 127.0.0.1:8082 weight=3;
server 127.0.0.1:8083 weight=1;
}
Backup属性
说明:正常情况下,备用机不生效.当主机宕机或者主机遇忙时备用机才生效.
#配置tomcat集群 默认轮询
upstream jtWindows {
#ip_hash;
server 127.0.0.1:8081 weight=6 down;
server 127.0.0.1:8082 weight=3 down;
server 127.0.0.1:8083 weight=1 backup;
}
Nginx心跳检测机制
说明:当服务器出现异常时,nginx会通过心跳检测机制校验是否正常,如果tomcat服务器在指定的时间内没有响应.说明该服务器宕机.则在内存中标识为down.
upstream jtWindows {
#ip_hash;
server 127.0.0.1:8081 max_fails=1 fail_timeout=60s;
server 127.0.0.1:8082 max_fails=1 fail_timeout=60s;
server 127.0.0.1:8083 max_fails=1 fail_timeout=60s;
}
1.max_fails=1 最大失败次数. 如果失败次数>=最大次数.则标识down
2.fail_timeout=60s; 该配置表示周期.当服务器宕机之后60秒内,用户不会访问该故障机.
热部署
不影响用户使用的前提下部署项目
1.分组 A B C 各有两个tomcat
2.分批上线
3.修改nginx服务器配置文件Down 属性 nginx重启
4.在A中部署服务器(jar包) 必须测试
5.重新编辑nginx配置文件, 完成后续操作
6.可使用脚本