博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
项目实战02:nginx 反向代理负载均衡、动静分离和缓存的实现
阅读量:4918 次
发布时间:2019-06-11

本文共 3237 字,大约阅读时间需要 10 分钟。

 

 

 

  总项目流程图,详见

实验一:实现反向代理负载均衡且动静分离

1、环境准备:

机器名称

IP配置

服务角色

备注

nginx

VIP:172.17.11.11

  

反向代理服务器

开启代理功能

设置监控,调度

rs01

RIP:172.17.22.22

后端服务器

stasic-srv 组

rs02

RIP:172.17.1.7

后端服务器

stasic-srv 组

rs01

RIP:172.17.77.77

后端服务器

defautl-srv 组

rs02

RIP:172.17.252.111

后端服务器

defautl-srv 组

  

2、下载编译安装tengine

原因:nginx自带的监控模式虽然能用,但是很不易理解;tengine的监控模式易设简单,且是在nginx的二次开发,和nginx差不多

(1)官网下载: 还支持中文

解包 tar tengine-2.1.1.tar.gz

cd tengine-2.1.1

(2)下载所依赖的包

yum -y groupinstall "development tools"

yum install openssl-devel -y

yum install pcre-devel -y

  

(3)编译安装

./configure --prefix=/usr/local/tengine 指定安装后的目录

make && make install

  

3、设置代理服务器的配置文件

cd /usr/local/tengine/conf

cp nginx.conf /usr/local/tengine/conf/ 若机器上本有nginx,可以把配置文件直接拷过来,没有也可自己设置

vim nginx.conf 全局段和 http段我就不设置了,默认就好

① 定义upstream:后端server 群

upstream lnmp-srv1 {        server 172.17.22.22:80;        server 172.17.1.7:80;        check interval=3000 rise=2 fall=5 timeout=1000 type=http;        check_http_send "HEAD / HTTP/1.0\r\n\r\n";        check_http_expect_alive http_2xx http_3xx;}upstream lnmp-srv2 {        server 172.17.77.77:80;        server 172.17.252.111:80;        server 172.17.1.7:80;        check interval=3000 rise=2 fall=5 timeout=1000 type=http;        check_http_send "HEAD / HTTP/1.0\r\n\r\n";        check_http_expect_alive http_2xx http_3xx;}

② 在server段的location 段中设置动静分离

server {   listen 80;   location /stats { #设置监听页面   check_status; }    location ~* .jpg|.png|.gif|.jpeg$ {      proxy_pass http://static-srv;   }    location ~* .css|.js|.html|.xml$ {      proxy_pass http://static-srv;   }   location / {     proxy_pass http://default-srv;   }} 

  

4、启动tengine服务

① 去编译安装的路径开启服务

cd /usr/local/tengine/sbin/

./nginx 启动tengine

./nginx -s stop 停止

  ② 也可以添加到开机自启

cd /usr/lib/systemd/system/nginx.service  添加修改,Centos 7

cd cd /etc/init.d/   Centos 6

 

5、开启后端的web服务

systemctl start nginx

systemctl start php-fpm

systemctl start mariadb

  

6、测试

(1)测试反向代理是否成功 http://172.17.11.11/ web页面访问成功

(2)测试状态页面 http://172.17.11.11/stats

  

(3)测试动静分离

把静态页面的后端server组的服务宕机,发现没有静态的东西了

  

实验二:nginx实现缓存功能

需求分析:为什么需要缓存?

  缓存的最根本的目的是为了提高网站性能, 减轻频繁访问数据 , 而给数据库带来的压力 。 合理的缓存 , 还会减轻程序运算时 , 对CPU 带来的压力。在计算机现代结构中, 操作内存中的数据比操作存放在硬盘上的数据是要快N 个数量级的 , 操作简单的文本结构的数据 , 比操作数据库中的数据快N 个数量级 。

  例如: 每次用户访问网站, 都必须从数据库读取网站的标题, 每读一次需要15 毫秒的时间, 如果有100 个用户( 先不考虑同一时间访问), 每小时访问10 次, 那么就需要读取数据库1000 次, 需要时间15000 毫秒. 如果把页面直接变成页面缓存,则每次访问就不需要去数据库读取,大大提升了网站性能。

原理:

缓存数据分为两部分( 索引, 数据):

① 存储数据的索引 ,存放在内存中;
② 存储缓存数据,存放在磁盘空间中;
  分析:如建立a.jpg的缓存,把它的uri作为索引放在内存中,实际图片数据放在磁盘空间中;缓存会有很多,所以索引存放的目录需分层级,把uri做hash运算,换算成16位进制,取最后一个数作为一级目录的名称[0-f];二级目录可以用随机最后第2,3位数作为名称[00-ff];三级目录以此类推...

  

1、环境准备:同上实验,实验结构图如下:

  

2、设置代理服务器的配置文件

① 先在http段定义缓存

proxy_cache_path /data/cache levels=1:2:2 keys_zone=proxycache:10m inactive=120s max_size=1g

分析:定义一个缓存,路径在/data/cache 下;三级目录,第一级[0-f]随机数字,第二、三级[00-ff]随机数字;定义缓存的名字proxycache,缓存大小10M;存活时间120s;在磁盘占用空间最大1G。

  

② 再在server段引用缓存

proxy_cache proxycache; #引用上面定义上的缓存空间,同一缓存空间可以在几个地方使用proxy_cache_key $request_uri; #对uri做hash运算proxy_cache_valid 200 302 301 1h; #200、302、301响应码的响应内容的缓存1小时proxy_cache_valid any 1m; #其它缓存1分 add_header Along-Cache "$upstream_cache_status form $server_addr"; #给请求响应增加一个头部信息,表示从服务器上返回的cache

  

3、测试:访问 http://172.17.11.11/ 

F12调试模式下,看到自己设置的特定头部存在

缓存目录也生成了缓存

转载于:https://www.cnblogs.com/haiyabtx/p/7843456.html

你可能感兴趣的文章
不支持事件冒泡的事件
查看>>
JavaScript中的for..in以及for...of
查看>>
JavaScript中in和hasOwnProperty的区别
查看>>
JavaScript 中 call()、apply()、bind() 的用法
查看>>
javascript中实现继承的6种方式
查看>>
CSS水平垂直居中常见方法总结(转)
查看>>
如何居中浮动元素
查看>>
rgba()和opacity的区别
查看>>
盒子模型以及css3指定盒子模型种类的box-sizing
查看>>
JS基础-连续赋值(转)
查看>>
前端解决跨域问题(转)
查看>>
dom元素的增删查改
查看>>
从一张搞笑图看JavaScript的语法和特性
查看>>
JavaScript中双等的使用情况
查看>>
leetcode 20.有效的括号
查看>>
线程安全性
查看>>
SecureCrt自动化
查看>>
移动端页面滚动穿透问题解决方案
查看>>
书:《腾讯传》
查看>>
关于jquery中html()、text()、val()的区别
查看>>