1.1.1反向代理概念
反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。同时,用户不需要知道目标服务器的地址,也无须在用户端作任何设定。反向代理服务器通常可用来作为Web加速,即使用反向代理作为Web服务器的前置机来降低网络和服务器的负载,提高访问效率。反向代理服务器位于用户与
1.2Nginx
1.2.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网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
占用内存小: 不到3M C语言开发
并发能力强: 5万/秒 3万左右/秒
1.2.2Nginx安装和下载
1.2.3Nginx 安装步骤
注意:
1.不要放到C盘
2.路径中千万不要有中文.
启动步骤:
以超级管理员权限启动nginx.exe
启动效果:
1.2.4关于进程项说明
主进程是为用户提供反向代理和负载均衡服务的
守护进程是防止主进程意外关闭
如果需要关闭Nginx则需要先关闭守护进程
1.2.5Nginx启动命令
说明:nginx的启动必须在根目录中执行.
1.nginx 启动命令 start nginx
2.nginx 重启 nginx -s reload
3.nginx 关闭 nginx -s stop
1.2.6 Nginx实现反向代理
1.2.6.1反向代理入门案例
server {
listen 80;
#配置拦截的域名
server_name localhost;
location / {
#root关键字 代理 是目录
root html;
#index 默认的欢迎页面
index index.html index.htm;
} }
1.2.6.2实现图片代理
#配置图片服务器
server {
listen 80;
server_name image.jt.com;
location / {
root D:/1_JT/images;
}
}
说明:配置成功之后,重启nginx.
1.2.6.3修改Hosts文件
调用步骤:
#京淘项目的映射配置方案 勿动
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
1.2.6.4页面效果展现
1.Nginx 应用
1.1Nginx实现域名代理
1.1.1调用流程
1.1.2Nginx配置
#配置后台管理服务器
server {
listen 80;
server_name manage.jt.com;
location / {
#实现http请求的转发
proxy_pass http://localhost:8091;
}
}
1.2Nginx负载均衡实现
需要搭建tomcat服.这时需要使用反向代理服务器.同时配置负载均衡.务器集群,共同抗击高并发
1.2.2动态获取端口号
package com.jt.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* 测试集群是否可用
* @author Administrator
*
*/
@RestController
public class MessageController {
@Value("${server.port}")
private String port;
@RequestMapping("/getPort")
public String getMsg() {
return "当前服务器端口号为:"+port;
}
}
1.2.3Tomcat集群搭建说明
说明:准备3台tomcat服务器.端口号分别为8081/8082/8083
错说明: 检查jt的pom.xml文件中模关于打包报块配置是否正确.
<modules>
<module>jt-common</module>
<module>jt-manage</module>
</modules>
1.2.41.2.4启动集群
命令: java -jar 8081.war
1.3.1轮循策略
说明:根据配置文件的顺序,依次访问服务器.
#配置windows集群 默认是轮循策略
upstream jtWindows {
server localhost:8081;
server localhost:8082;
server localhost:8083;
}
#配置后台管理服务器
server {
listen 80;
server_name manage.jt.com;
location / {
#实现http请求的转发
proxy_pass http://jtWindows;
}
}
说明:可以为某些服务器添加权重,让该服务器更多的为用户提供服务
#配置windows集群 默认是轮循策略 权重
upstream jtWindows {
server localhost:8081 weight=6;
server localhost:8082 weight=3;
server localhost:8083 weight=1;
}
1.3.3IPHASH策略
问题说明:如果采用集群的部署,如果做敏感操作时,要求用户必须登录.但是由于nginx实现了负载均衡的操作,导致用户的Session数据不同共享.从而导致用户频繁登录.用户体验较差.
问题: nginx实现了tomcat负载均衡. 导致用户每次访问都是不同的服务器.
解决方案: 能否让用户每次访问同一台服务器 IPHASH策略
配置如下:
#配置windows集群 默认是轮循策略 权重
upstream jtWindows {
ip_hash;
server localhost:8081 weight=6;
server localhost:8082 weight=3;
server localhost:8083 weight=1;
}
1.3.3.1Iphash存在的问题
1.Iphash如果一旦服务器出现异常,导致业务失效.
2.可能会出现负载不均的现象.
一般不会使用Iphash,但是如果本次测试时可以使用.
1.3.3.2单点登录系统(SSO)
单点登录(SingleSignOn,SSO),就是通过用户的一次性鉴别登录。当用户在身份认证服务器上登录一次以后,即可获得访问单点登录系统中其他关联系统和应用软件的权限,同时这种实现是不需要管理员对用户的登录状态或其他信息进行修改的,这意味着在多个应用系统中,用户只需一次登录就可以访问所有相互信任的应用系统。这种方式减少了由登录产生的时间消耗,辅助了用户管理,是目前比较流行的 [1]
1.4NGINX常用属性
说明:如果服务器宕机,可以在配置文件中标识为down.这样以后不会再访问故障机.
upstream jtWindows {
#ip_hash;
server localhost:8081 down;
server localhost:8082;
server localhost:8083;
}
1.4.2Backup
说明:备用机设置,正常情况下,该服务器不会被访问.当主机全部宕机或者主机遇忙时,该服务器才会访问.
upstream jtWindows {
#ip_hash;
server localhost:8081 down;
server localhost:8082;
server localhost:8083 backup;
}
1.4.3宕机服务器高可用设定
说明:当服务器宕机时,如果访问的失败次数达到最大失败次数,则标识为down.自动完成.在一定的周期之内,如果服务器回复正常,则还会尝试访问故障机.
max_fails=1 最大的失败次数
fail_timeout=60s; 设定周期为60秒
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;
}