1.反向代理说明:
当用户发起请求时,首先请求被nginx(此处可以理解为转化器)拦截。根据背部配置文件的约定。将请求的URL地址进行替换。由转换器发起请求,去访问真实的网络资源,之后由转化器将资源交还给用户的过程。
核心特点:
用户无需关心真实的服务器资源到底是谁,由代理服务器代替用户访问。
2.正向代理:
核心特点:
用户了解自己访问的资源的位置。并且由用户自己去获取真实的资源。
3.nginx:
3.1nginx核心介绍
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网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
内存少:不到2M 开发语言:C语言(小,贴近硬件)
并发能力强:
Tomcat服务器 250± 实际150±
nginx服务器 5万/秒 实际3万/秒
3.2nginx下载:http://nginx.org/en/download.html
3.2.1安装要求:
重要说明:
1.nginx软件不要安装到c盘(防止由于权限问题,导致软件无法使用)
2.安装文件路径不要有中文 nginx
3.2.2安装步骤:
1.以管理员身份运行(获取管理员权限)
2.通过路径访问,测试nginx启动是否正常。
http://localhost:80 nginx会占用80端口,所以其他软件不能占用。
3.线程说明:
nginx启动时,会启动2个服务项
1.主线程:提供反向代理服务。
2.守护进程:防止主进程意外关闭。
关闭nginx步骤:1.先关闭守护进程(内存小的),之后关闭主进程(内存大的。)
4.nginx命令
要求:执行nginx命令需要在nginx.exe根目录中执行。
1.启动命令:start nginx
2.重启命令:nginx -s reload
3.关闭命令:nginx -s stop
5.反向代理入门:
模板:
server {
#nginx默认监听的端口号80
listen 80;
#拦截用户的请求路径
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
#反向代理配置 / 代表全部请求
location / {
#root是关键字 代表跳转文件目录
root html;
#index是关键字 默认欢迎页面
index index.html index.htm;
}
}
反向代理图片:
#配置图片服务器
server {
listen 80;
server_name lx.com;
#个别计算机,不能识别\,换位/
location / {
root D:/lx/image;
}
}
单击测试和注意事项:
修改hosts里面的相关配置。
(如果不能修改的话,按照下面的流程进行取消只读就好)
4.Tomcat集群搭建:
4.1数据测算:
单台Tomcat服务器一天可以为用户提供多少次响应?
大约600万-700万之间。大约为10000个用户提供支持。
4.2集群说明:
搭建Tomcat服务器集群,是抗击高并发的有效手段。使用多台服务器,其中部署的项目是相同的。
4.3nginx实现域名代理:
1.配置nginx配置文件:
#配置后台管理服务器 manage.jt.com localhost:8091
server{
listen 80;
server_name lx.com;
location / {
proxy_pass http://localhost:8091;
}
}
可以直接使用lx.com来代理localhost:8091
4.4nginx中常见报错:
1.安装和配置
C盘/中文路径 nginx一定不能正常使用。
2.nginx配置问题:
nginx -s reload 如果配置有错,则报错提示(90%)
nginx配置出问题。但是reload没有报错现象。nginx重新解压nginx 检查重启项可以启动多次。
3.hosts不生效 将计算机重启
4.localhost 关键字不生效 将localhost换成计算机名
5.项目打包:
分别打8081,8082,8083三个jar包。
然后通过
java -jar 8081.war
java -jar 8082.war
java -jar 8083.war 关闭 ctrl + c
6.nginx实现负载均衡
6.1轮询策略:
策略说明:根据配置文件的顺序,依次访问tomcat服务器.
server{
listen 80;
server_name lx.com;
location / {
proxy_pass http://jtWindows;
}
}
#定义windows集群
upstream jtWindows {
server localhost:8081;
server localhost:8082;
server localhost:8083;
}
修改完成之后,重启nginx服务器.
6.2权重方式(旧公司)
需求:公司中服务器可能会更新迭代.导致物理设备处理能力不同.如果这时采用轮询的机制,可能会影响用户使用.
#定义windows集群 1.默认 轮询 2.权重
upstream jtWindows {
server localhost:8081 weight=6;
server localhost:8082 weight=3;
server localhost:8083 weight=1;
}
6.3IP_HASH(了解)
业务需求:要求实现session共享!!!,用户要求只登陆一次,即可访问全部的tomcat集群.
A: 利用Ngninx服务器实现Session共享.
缺点:
- 如果nginx服务器宕机,则直接影响用户.
- nginx服务器中保存了大量的用户Session信息.内存开销大.
B:采用IPHASH策略
优点:利用用户的IP地址之后进行hash运算.之后与服务器进行动态的绑定.变相的实现Session共享.
缺点: - 会导致严重的负载不均.
- 如果其中某台服务器宕机.则直接影响绑定用户.
C:实现SSO(单点登录操作)
说明:SSO是一种实现用户登录一次即可访问相互之间信任系统的解决方案. 思想相同,实施可能不同.
7. Nginx高级属性配置
1.1.1 down属性
说明:有时tomcat服务器可能会发生意外宕机.这时nginx服务器做负载均衡时,如果访问故障机,nginx首先会连接故障机,如果1-3秒连接不同,则访问下一太个
属性作用:标识故障机. nginx以后不再访问该机器.
1.1.2 backup属性
说明:一般配置集群时会添加一些备用机.防止主机宕机之后没有足够的服务器响应用户.导致服务器异常.
触发策略: 当主机遇忙时/主机全部宕机时.backup主机生效.
#定义windows集群 1.默认 轮询 2.权重 3.IPhash
upstream jtWindows {
#ip_hash;
server localhost:8081 down;
server localhost:8082 down;
server localhost:8083 backup;
}
1.1.3 Nginx高可用策略
1.1.3.1 高可用(HA)
为了屏蔽负载均衡服务器的失效,需要建立一个备份机。主服务器和备份机上都运行High Availability监控程序,通过传送诸如“I am alive”这样的信息来监控对方的运行状况。当备份机不能在一定的时间内收到这样的信息时,它就接管主服务器的服务IP并继续提供服务;当备份管理器又从主管理器收到“I am alive”这样的信息时,它就释放服务IP地址,这样的主管理器就开始再次进行集群管理的工作了。为在主服务器失效的情况下系统能正常工作,我们在主、备份机之间实现负载集群系统配置信息的同步与备份,保持二者系统的基本一致。
总结:首先有主从结构,当主机发生了宕机现象,则可以自动的实现故障的迁移.
1.1.3.2 Nginx高可用配置
max_fails=1 :定义最大的失败次数,该服务器连续失败几次,不再访问该服务器.
fail_timeout=60s 定义访问的周期 60秒
#定义windows集群 1.默认 轮询 2.权重 3.IPhash
upstream jtWindows {
#ip_hash;
server localhost:8081 max_fails=1 fail_timeout=60s;
server localhost:8082 max_fails=1 fail_timeout=60s;
server localhost:8083 max_fails=1 fail_timeout=60s;
}
执行过程:
当用户访问nginx时,如果该服务器访问失败,则在指定的周期内,不会再次访问故障机.到了下一个周期会自动的校验,如果依然访问不同,在等下一个周期.
#定义超时时间
proxy_connect_timeout 1;
proxy_read_timeout 1;
proxy_send_timeout 1;
Linux集群配置: