反向代理的优点
保护
真实 web 服务器,其对外不可见;节约
了有限的 ip 地址资源;减少
web 服务器压力,提高响应速度;- 请求的统一控制,包括设置权限、过滤规则等;
- 区分动态和静态可缓存内容;
- 实现负载均衡,内部可以采用多台服务器来组成服务器集群,外部还是可以采用一个地址访问;
- 解决 Ajax 跨域问题;
- 作为真实服务器的缓冲,解决瞬间负载量大的问题;
配置文件
|
功能实现
基于域名的虚拟主机
第一步: 假设我们在本地开发有3个项目,需要分别在 hosts 里映射到本地
的127.0.0.1上:
|
第二步: 分别对应于web根目录下的3个文件夹,用域名对应文件夹
名字,为了好记:
|
每个目录都有一个 index.html 文件, 都是简单的输出自己的域名.
第三步: 我们要新建3个server来搭建对应个域名的虚拟主机
。
这3个 server 配置信息都写成一个 .conf 的配置文件,然后在 http 模块统一导入,这样比较便于维护和管理
|
既然每一个conf都是一个server,下面就开始:
|
|
|
这样3个很精简的虚拟域名就搭建好了。
重启下nginx,然后打开浏览器访问一下这3个域名,就能看到对应的域名内容了。
反向代理
Nginx 使用反向代理,主要是使用location模块下的 proxy_pass
选项。
|
第一步: 在 hosts 里新加域名:
|
第二步: 在 servers 目录中新建一个 .conf 的配置文件:
|
执行 sudo nginx -s reload
重启后访问 centos.com
负载均衡
啥是负载均衡 ?
比如我们有一个小网站,刚开始就一台nginx服务器,
后来,随着业务量增大,用户增多,一台服务器已经不够用了,
我们就又多加了几台服务器。那么这几台服务器 如何调度
?如何均匀提供访问
?
这就是负载均衡。
负载均衡的好处是可以集群多台机器一起工作,并且对外的IP和域名是一样的,外界看起来就好像一台机器一样。
基于 weight 权重的负载
|
基于 ip_hash 的负载
每个请求按访问IP的hash结果分配,这样来自同一个IP的访客固定访问一个后端服务器,有效解决了动态网页存在的session共享问题。
|
注: ip_hash 模式下,不要设置 weight
和 backup
页面缓存
只需要简单配置下,就能将指定的一个页面缓存起来.
原理就是匹配当前访问的url, hash加密后,去指定的缓存目录查找
, 有的话就说明匹配到缓存.
先来看一下一个简单的页面缓存的配置:
|
开始进行实战
第一步: Parallels Desktop 上启动一台 linux 虚拟机(10.211.55.5)
第二部: Mac hosts配置 cache.com
域名, 然后按照上面的配置在 servers 下新建一个 cache.conf
文件:
|
访问 cache.com
查看 network
网络请求选项,我们可以看到,Response Headers,在这里我们可以看到:
|
X-cache 为 MISS 表示未命中,请求被传送到后端。
因为是第一次访问,没有缓存,所以肯定是未命中。
我们再刷新下,就发现其变成了HIT, 表示命中。
X-cache 的其他几种状态:
状态 | 说明 |
---|---|
MISS | 未命中,请求被传送到后端 |
HIT | 缓存命中 |
EXPIRED | 缓存已经过期请求被传送到后端 |
UPDATING | 正在更新缓存,将使用旧的应答 |
STALE | 后端将得到过期的应答 |
BYPASS | 缓存被绕过了 |
我们再去看看缓存文件夹 /usr/local/var/cache里面是否有了文件:
|
已经生成了缓存文件。
我们在url 后面随便加一个什么参数,
看会不会新生成一个缓存文件夹及文件:http://cache.com/?w=ww55 。
因为我们使用的生成规则是全部url转换(proxy_cache_key $host$uri$is_args$args;)
查看 X-cache 为 MISS,再刷新 ,变成HIT。
缓存文件夹 /usr/local/var/cache 又会多出对应缓存文件.
Location 正则模块
location /
表示匹配访问根目录。location ~
表示开启正则匹配。
还可以用这个来匹配静态资源,缓存它们,设置过期时间:
|
配置说明
|