Nginx
虚拟主机
虚拟主机就是把一台物理服务器划分成多个“虚拟”的服务器,各个虚拟主机之间完全独立,在外界看来,每一台虚拟主机和一台单独的主机的表现完全相同。所以这种被虚拟化的逻辑主机被形象地称为“虚拟主机”。
优点:
由于多台虚拟主机共享一台真实主机的资源,每个虚拟主机用户承受的硬件费用、网络维护费用、通信线路的费用均大幅度降低。许多企业建立网站都采用这种方法,这样不仅大大节省了购买机器和租用专线的费用,网站服务器服务器管理简单,诸如软件配置、防病毒、防攻击等安全措施都由专业服务商提供,大大简化了服务器管理的复杂性;同时也不必为使用和维护服务器的技术问题担心,更不必聘用专门的管理人员。
类别:
1、基于域名的虚拟主机,通过域名来区分虚拟主机
2、基于端口的虚拟主机,通过端口来区分虚拟主机
3、基于ip的虚拟主机,很少用。
1.基于域名的虚拟主机
http {
upstream keywords01{
server node01;
server node02;
}
upstream keywords02{
server node03;
}
server {
listen 80;
//访问xxx2.com的时候,会把请求导到keywords02的服务器组里
server_name xxx2.com;
location / {
proxy_pass http://keywords02;
}
}
server {
listen 80;
//访问xxx1.com的时候,会把请求导到keywords01的服务器组里
server_name xxx1.com;
location / {
proxy_pass http://keywords01;
}
}
}
注意:基于域名的虚拟机主机 在模拟应用场景时,需要在windows系统的hosts文件里配置域名映射;
2.基于端口的虚拟主机
http {
upstream keywords01{
server node01;
server node02;
}
upstream keywords02{
server node03
}
server {
//当访问nginx的80端口时,将请求导给keywords02组
listen 8080;
server_name localhost;
location / {
proxy_pass http://keywords02;
}
}
server {
//当访问nginx的81端口时,将请求导给keywords01组
listen 81;
server_name localhost;
location / {
proxy_pass http://keywords01;
}
}
}
正向代理和反向代理
正向代理
举个栗子:我是一个用户,我访问不了某网站,但是我能访问一个代理服务器,这个代理服务器呢,他能访问那个我不能访问的网站,于是我先连上代理服务器,告诉他我需要那个无法访问网站的内容,代理服务器去取回来,然后返回给我。像我们经常通过vpn访问国外的网站,此时就是正向代理。客户端必须设置正向代理服务器,当然前提是要知道正向代理服务器的IP地址,还有代理程序的端口。 再比如下面的翻墙:
反向代理
反向代理(Reverse Proxy) 方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器=
反向代理隐藏了真实的服务端,当我们请求 www.baidu.com 的时候,就像拨打 10086 一样,背后可能有成千上万台服务器为我们服务,但具体是哪一台,你不知道,也不需要知道,你只需要知道反向代理服务器是谁就好了,www.baidu.com 就是我们的反向代理服务器,反向代理服务器会帮我们把请求转发到真实的服务器那里去。Nginx 就是性能非常好的反向代理服务器,用来做负载均衡。
Nginx的session的一致性问题
http协议是无状态的,即你连续访问某个网页100次和访问1次对服务器来说是没有区别对待的,因为它记不住你。
那么,在一些场合,确实需要服务器记住当前用户怎么办?比如用户登录邮箱后,接下来要收邮件、写邮件,总不能每次操作都让用户输入用户名和密码吧,为了解决这个问题,session的方案就被提了出来,事实上它并不是什么新技术,而且也不能脱离http协议以及任何现有的web技术。
session的常见实现形式是会话cookie(session cookie),即未设置过期时间的cookie,这个cookie的默认生命周期为浏览器会话期间,只要关闭浏览器窗口,cookie就消失了。
Session共享
首先我们应该明白,为什么要实现共享,如果你的网站是存放在一个机器上,那么是不存在这个问题的,因为会话数据就在这台机器,但是如果你使用了负载均衡把请求分发到不同的机器呢?这个时候会话id在客户端是没有问题的,但是如果用户的两次请求到了两台不同的机器,而它的session数据可能存在其中一台机器,这个时候就会出现取不到session数据的情况,于是session的共享就成了一个问题。
Session一致性解决方案
1 session复制
tomcat 本身带有复制session的功能。
2 共享session
需要专门管理session的软件,
memcached 缓存服务,可以和tomcat整合,帮助tomcat共享管理session。
安装memcached
http://pjyn8dgy4.bkt.clouddn.com/memcached%E5%AE%89%E8%A3%85.txt