Nginx介绍
Nginx是一款轻量级的web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,其特点是占有内存少,并发能力强,并发能力在同类型的网页服务器表现较好,其中百度,京东,新浪,网易,腾讯,淘宝等大型网站都有使用Nginx.
内存:不到2M
并发能力强:3-5万次/秒 而tomcat在理想情况下才150-220/秒.
Nginx命令操作
可以直接在本地以管理员身份运行nginx.exe,或通过命令行启动.Nginx每次启动都会生成2个进程:主进程(提供nginx反向代理服务)和守护进程(防止主进程意外关闭).
在nginx根目录下执行
start nginx 启动nginx,即使不成功也不会报错!!!
nginx -s reload 重启nginx,如果配置文件有错,则会显示报错信息
nginx -s stop 停止nginx
Nginx 配置文件介绍
Nginx配置文件为nginx.conf,一般我们在http里配置server{}我们的需求即可
http {
server {
#本地访问的地址
listen 80; # 监听端口号
server_name localhost; # 监听的服务名称
#反向代理的配置,获取用户指定的请求之后,将请求转向到什么位置
# / 请求访问的根目录
location / {
# root关键字 反向代理文件目录
root html;
# index关键字 默认跳转页面
index index.html index.htm;
}
}
}
然后在浏览器访问localhost:80能看到如下页面即代表安装成功
上传图片回显
修改配置文件nginx.conf,然后重启nginx
# 配置图片服务器代理 个别windows中"_-"字符可能不识别
server {
listen 80;
server_name image.jt.com;
location / {
#映射到目录中
root D:\JT-SOFT\images;
}
}
如果没有买域名是不能直接反向代理的,当我们可以更改本地的hosts文件.
编辑HOSTS文件
利用switchHosts编辑文件(其他方式编辑也行)
如修改hosts文件权限
如果不能修改,或修改后不能运行成功,就修改hosts文件权限
实现域名代理
要求: 用户通过http://manage.jt.com:80 访问localhost:8091服务器.
在http里配置
# 配置域名代理
server {
listen 80;
server_name manage.jt.com;
location / {
#代理的是服务器地址
proxy_pass http://localhost:8091;
}
}
代理机制
反向代理
反向代理服务器位于用户与目标服务器之间,但对于用户来说,反向代理服务器就是目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源.同时,用户不需要知道目标服务器的地址,也无须在用户端作任何设定。反向代理服务器通常可用来作为Web加速,即使用反向代理作为Web服务器的前置机来降低网络和服务器的负载,提高访问效率。
总结:
①反向代理服务器位于目标服务器和用户之间.
②对于用户而言,反向代理服务器就是目标服务器.
③用户访问时根本不知道真实的的服务器资源是谁,保护了真实服务器资源的信息.
④反向服务器一般是服务器代理,保护真实服务器信息.
正向代理(扩展)
正向代理,意思是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端才能使用正向代理。
知识点:
1).代理服务器位于用户与服务器之间
2).用户发起请求时,清楚的知道自己访问的真实服务器是谁.
3).代理服务器将用户的请求转交给服务器获取数据.
4).正向代理是客户端代理,保护了用户的信息.
Nginx负载均衡策略
什么是负载均衡
在分布式条件下,为了提高用户请求的相应能力,准备多台服务器,一起抗击高并发,需要用户通过同一个网址访问不同的服务器的技术称之为负载均衡机制。
准备多台Tomcat服务器
准备3台Tomcat·服务器,并且端口号依次为8081/8082/8083,之后完成项目在windows部署
创建MsgController
目的:动态的获取当前服务器是哪个端口号信息
@RestController
public class MsgController {
@Value("${server.port}")
private int port;
//主要获取当前访问服务器的端口号信息!!!!
@RequestMapping("/getPort")
public String getMsg() {
return "您当前访问的服务器端口号:"+port;
}
}
项目打包
依次修改yml中的端口号为8081/8082/8083,并依次打包下来
打包步骤:
然后复制粘贴改名到本地上
在本地目录cmd下运行项目:java -jar 8081.war,访问localhost:8081
项目发布的问题
通过命令发布项目之后,浏览器访问速度较慢(不正常)
解决方法一:直接关闭当前dos命令窗口
解决方法二:ctrl + c方式 释放资源
Nginx实现负载均衡
目标:通过http://manage.jt.com 方式 依次访问8081/8082/8083服务器.
负载均衡策略—轮询
说明:根据配置文件的顺序,依次访问tomcat服务器,配置如下
# 配置域名代理
server {
listen 80;
server_name manage.jt.com;
location / {
#代理的是服务器地址
#proxy_pass http://localhost:8091;
proxy_pass http://jtW;
}
}
#定义多台tomcat服务器 1.轮询策略
upstream jtW {
server localhost:8081;
server localhost:8082;
server localhost:8083;
}
负载均衡策略—权重
权重策略:让性能更优的服务器处理更多的处理请求。
#定义多台tomcat服务器 1.轮询策略 2.权重策略
upstream jtW {
server localhost:8081 weight=6;
server localhost:8082 weight=3;
server localhost:8083 weight=1;
}
负载均衡策略—IPHASH策略
说明: 如果需要用户与后端服务器进行绑定时,可以使用IPhash策略.
案例A: 有时用户可能做登录操作,可能将用户信息保存到session对象 中,如果这时采用轮询/权重的策略,可能访问其他的业务服务器.导致用户频繁的登录.
配置信息:
#定义多台tomcat服务器 1.轮询策略 2.权重策略
upstream jtW {
ip_hash;
server localhost:8081 weight=6;
server localhost:8082 weight=3;
server localhost:8083 weight=1;
}
IPHASH原理:
补充知识:
1).IPHASH一般只做测试时用.
2).使用IPHASH可能造成负载不均的现象. 某些服务器负载压力过高.有宕机的风险.
3).使用IPHASH时,如果后端服务器宕机,则直接影响用户的使用.
4).工作中如果需要实现用户信息的共享,一般采用SSO的方式进行.
用户只需一次登录就可以访问所有相互信任的应用系统
关于Nginx属性配置
Nginx工作原理说明
默认情况下,Nginx会按照指定的负载均衡规则访问服务器。如果访问的服务器又出现了问题,那么则会访问下一台服务器。但是随着负载均衡的继续,还会继续访问故障机,导致效率低。
down属性
说明:如果遇到某台Tomcat服务器宕机,则可以通过down属性标识故障机,则Nginx永远不会主动访问故障机。
#定义多台tomcat服务器 1.轮询策略 2.权重策略 3.ip_hash策略
upstream jtW {
#ip_hash;
server localhost:8081 weight=6 down;
server localhost:8082 weight=3;
server localhost:8083 weight=1;
}
backup属性
说明:backup的作用标识备用机,一般情况下不使用,当遇到主机全部宕机/遇忙时,这是备用机才会生效。
#定义多台tomcat服务器 1.轮询策略 2.权重策略 3.ip_hash策略
upstream jtW {
#ip_hash;
server localhost:8081 weight=6 down;
server localhost:8082 weight=3 down;
server localhost:8083 weight=1 backup;
}
设定访问超时
属性说明:
1.max_fails=1允许访问失败的最多次数
2.fail_timeout=60s失败的超时时间(理解为时间区间)
当服务器宕机时,这是配置文件还没有被标识为down时。开启了高可用的机制,只要失败的次数超过了最大失败次数,则在指定的时间周期之内,不会再洗访问故障机。
#定义多台tomcat服务器 1.轮询策略 2.权重策略 3.ip_hash策略
upstream jtW {
#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;
}