当前位置: 首页 > news >正文

nginx动静分离配置_nginx实现动静分离的负载均衡集群

1、负载均衡介绍

LB负载均衡集群分两类:LVS (四层)和 nginxhaproxy (七层)

客户端通过访问分发器的VIP来访问网站,现在应用更复杂,比如现在网站页面有:.php  .html    .png    .jpeg  .jsp 等, 有动态页面有静态页面。静态页面一般是不变的,想访问更快些。但是前面的LVS是四层的。基于IP的。现在需要在应用层基于不同的应用进行分发。Nginx / Haproxy都可以支持7层

工作中,希望这样:

静态文件处理:可以使用nginx apache

动文件处理: apache ,tomcat

图片文件处理: squid

2、 Nginx 负载均衡基础知识

Nginx upstream 负载的5种方式,目前最常用 3种方式

 1)、轮询(默认)

 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。

 2)weight

 指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。

 3)ip_hash

 每个请求按访问 ip hash 结果分配,这样每个访客固定访问一个后端服务器,可以解决 session 的问题。

 4)fair(第三方)

按后端服务器的响应时间来分配请求,响应时间短的优先分配。

 5)url_hash(第三方) url哈西

按访问url的hash结果来分配请求,使同样的url定向到同一个后端服务器,后端服务器为缓存时比较有效

3、使用nginx实现负载均衡和动静分离

3.1安装nginx时必须先安装相应的编译工具和相关依赖

 [root@docker-02 ~]# yum -y install gcc gcc-c++ autoconf automake[root@docker-02 ~]# yum -y install zlib zlib-devel openssl openssl-devel pcre pcre-devel

zlib:nginx提供gzip模块,需要zlib库支持openssl:nginx提供ssl功能pcre:支持地址重写rewrite功能

3.2安装nginx

 [root@docker-02 ~]# wget http://nginx.org/download/nginx-1.8.0.tar.gz[root@docker-02 ~]# tar -zxvf nginx-1.8.0.tar.gz -C /usr/local/src/[root@docker-02 nginx-1.8.0]# cd /usr/local/src/nginx-1.8.0/[root@docker-02 nginx-1.8.0]# ./configure --prefix=/usr/local/nginx --with-http_dav_module --with-http_stub_status_module --with-http_addition_module --with-http_sub_module --with-http_flv_module --with-http_mp4_module[root@docker-02 nginx-1.8.0]# make -j 4 [root@docker-02 nginx-1.8.0]# make install##查看参数:[root@docker-02 nginx-1.8.0]# ./configure --help | grep mp4

参数:

--with-http_dav_module 启用ngx_http_dav_module支持(增加PUT,DELETE,MKCOL:创建集合,COPY和MOVE方法)默认情况下为关闭,需编译开启

--with-http_stub_status_module 启用ngx_http_stub_status_module支持(获取nginx自上次启动以来的工作状态)

--with-http_addition_module 启用ngx_http_addition_module支持(作为一个输出过滤器,支持不完全缓冲,分部分响应请求)

--with-http_sub_module 启用ngx_http_sub_module支持(允许用一些其他文本替换nginx响应中的一些文本)

--with-http_flv_module 启用ngx_http_flv_module支持(提供寻求内存使用基于时间的偏移量文件)

--with-http_mp4_module  启用对mp4文件支持(提供寻求内存使用基于时间的偏移量文件)

编译和安装: (查看CPU逻辑数cat /proc/cpuinfo | grep processor | wc -l)

3.3生成运行nginx的用户

 [root@docker-02 nginx-1.8.0]# useradd -u 8000 -s /sbin/nologin nginx[root@docker-02 nginx-1.8.0]# id !$id nginxuid=8000(nginx) gid=8000(nginx) 组=8000(nginx)

3.4介绍nginx主要目录结构

 [root@docker-02 nginx]# ls /usr/local/nginx/conf html logs sbinconf  #配置文件html  #网站根目录logs  #日志sbin  #nginx启动脚本##主配置文件:[root@docker-02 nginx]# ls /usr/local/nginx/conf/nginx.conf

3.5开机启动nginx

 [root@docker-02 nginx]# echo '/usr/local/nginx/sbin/nginx &' >> /etc/rc.local ##检查[root@docker-02 sbin]# ./nginx -tnginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is oknginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful##启动报错[root@docker-02 sbin]# ./nginx -s reloadnginx: [error] invalid PID number ""in"/usr/local/nginx/logs/nginx.pid"##解决办法[root@docker-02 sbin]# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf##测试[root@docker-02 sbin]# curl 172.17.1.151

4、配置nginx成为分发器,实现动静分离

 [root@docker-02 sbin]# cd /usr/local/nginx/conf/ ##配置文件目录[root@docker-02 conf]# cp nginx.conf nginx.conf.bak ##备份一下配置文件[root@docker-02 conf]# vim nginx.conf改:# user nobody;   ##指定启动nginx用户为:user nginx nginx; 改:41        #access_log logs/host.access.log main;4243        location / {44            root   html;45            index index.html index.htm;46        if($request_uri~* \.html$){47                  proxy_pass http://htmlservers;48          }49        if($request_uri~* \.php$){50                  proxy_pass http://phpservers;51          }52                  proxy_pass http://picservers;53        }##把以下内容注释掉,否则php文件直接在nginx服务器上解析了,不再解析给后端服务器:70        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:900071        #72        #location ~ \.php$ {73        #   root           html;74        #   fastcgi_pass   127.0.0.1:9000;75        #   fastcgi_index index.php;76        #   fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_s   cript_name;77        #   include       fastcgi_params;78        #}##定义负载均衡设备的 Ip##定义负载均衡设备的 Ip###在配置文件nginx.conf的最后一行}前,添加以下内容:123upstream htmlservers {   #定义负载均衡服务器组名称124        server 172.17.1.150:80;125        server 172.17.1.152:80;126}127upstream phpservers{128        server 172.17.1.150:80;129        server 172.17.1.152:80;130}131upstream picservers {132        server 172.17.1.150:80;133        server 172.17.1.152:80;134}#后期工作中,根据工作中的需要,配置成具体业务的IP地址

5、重新加载nginx服务器配置文件

 [root@docker-02 conf]# ./nginx -t[root@docker-02 conf]# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

6、配置后端服务器: 172.17.1.150 172.17.1.151(两台机器同时执行)

 [root@docker-01 html]# yum install httpd php -y##另一台写maoxiaopu进配置文件[root@docker-01 html]# echo yunweimao > /var/www/html/index.html[root@docker-01 html]# vim /var/www/html/test.php172.17.1.150-php<?php phpinfo();?>

上传一张图片,到172.17.1.150网站/var/www/html/目录下:

启动apache服务器:

 [root@docker-01 html]# service httpd restart

7、测试

7.1测试静态界面http://172.17.1.151/

ead18e15d19acaa407d950f4442f54aa.png

a789139b806b3009135ce3c041e398a2.png

7.2测试转发动态页面

fc5a70a882d8cf9fad53021594a5d9c6.png

2ffca9c7dc59f6a5d4f18b2bc03e6e8b.png

7.3测试转发图片

86d5f16b829fbc3901832f86cab8f89e.png

dee2948238b3fed0c61f17b0197d7bbb.png

关于运维学习、分享、交流,笔者开通了微信公众号【运维猫】,感兴趣的朋友可以关注下,欢迎加入,建立属于我们自己的小圈子,一起学运维知识。

c068850606662d6d9bc7ebcc866c6030.png

女票从事平面设计这一块,需要设计海报,宣传册的也可以联系我,明码标价3元/1页。

有需要技术交流的小伙伴可以加我微信,期待与大家共同成长,本人微信:

b3f1ed9f62883acc54e3dbadb8f70158.png

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 乌龙钻白玉 白虎卧沙滩
  • js代码效率和java代码执行效率哪个更高_这35个Java代码优化细节,你用了吗?
  • DSP TMS320F2812的SPI使用总结
  • python dict遍历_python实现dict版图遍历
  • 2007年技术图书出版,我们有多少“第一本”?
  • python 截取_python中截取
  • wegame系统推荐头像_国产单机游戏《九霄缳神记》正式发售:登陆Steam/WeGame双平台...
  • 常用端口号大全
  • 安卓判断控件是否已经获得焦点_DevExpress 通用控件系列(4):SimpleButton
  • 创建索引视图时提示架构绑定无效,名称必须由两部分构成
  • python读取表格方法_python读取Excel表格文件的方法
  • 艰难的shader系统(三)--前期计划
  • python安装sqlalchemy python2_python数据库操作之pymysql模块和sqlalchemy模块(项目必备)...
  • Splinter(Gtalk)的免费网络电话
  • python输入名字格式是否为正确的姓名格式_c# winform中如何判断输入的信息是否为姓名格式 电话格式 年龄格式...
  • [译] React v16.8: 含有Hooks的版本
  • 【笔记】你不知道的JS读书笔记——Promise
  • 5、React组件事件详解
  • conda常用的命令
  • el-input获取焦点 input输入框为空时高亮 el-input值非法时
  • Invalidate和postInvalidate的区别
  • k8s 面向应用开发者的基础命令
  • Linux各目录及每个目录的详细介绍
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • quasar-framework cnodejs社区
  • React 快速上手 - 07 前端路由 react-router
  • React-生命周期杂记
  • 从地狱到天堂,Node 回调向 async/await 转变
  • 工作中总结前端开发流程--vue项目
  • 我的面试准备过程--容器(更新中)
  • 小李飞刀:SQL题目刷起来!
  • AI算硅基生命吗,为什么?
  • PostgreSQL之连接数修改
  • Redis4.x新特性 -- 萌萌的MEMORY DOCTOR
  • 阿里云ACE认证之理解CDN技术
  • ​LeetCode解法汇总2182. 构造限制重复的字符串
  • # windows 安装 mysql 显示 no packages found 解决方法
  • #1015 : KMP算法
  • (14)学习笔记:动手深度学习(Pytorch神经网络基础)
  • (CPU/GPU)粒子继承贴图颜色发射
  • (C语言)字符分类函数
  • (二)延时任务篇——通过redis的key监听,实现延迟任务实战
  • (算法二)滑动窗口
  • (详细版)Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models
  • (转)ORM
  • *(长期更新)软考网络工程师学习笔记——Section 22 无线局域网
  • ./configure、make、make install 命令
  • .【机器学习】隐马尔可夫模型(Hidden Markov Model,HMM)
  • .net core IResultFilter 的 OnResultExecuted和OnResultExecuting的区别
  • .NET Core 将实体类转换为 SQL(ORM 映射)
  • .NET4.0并行计算技术基础(1)
  • .vimrc php,修改home目录下的.vimrc文件,vim配置php高亮显示
  • /usr/local/nginx/logs/nginx.pid failed (2: No such file or directory)
  • @angular/cli项目构建--Dynamic.Form
  • [ IDE ] SEGGER Embedded Studio for RISC-V