• 首页
  • 前端
    • HTML
    • CSS
    • Javascript
    • XML
    • AJAX
  • 前端框架
    • BootStrap
    • Jquery
  • PHP
    • 语法
    • 核心
    • 面向对象
    • PHP7
    • Socket
    • Swoole
  • 数据库
    • Mysql
    • Redis
    • Memcache
    • MongoDB
  • 优化
    • 优化方案
    • 页面静态化
    • Nginx
  • 后台框架与实战
    • Smarty
    • 源码Blog
    • TP3.2
    • TP3.2商城
    • TP5.0
    • TP5.0商城
    • Laravel
    • Laravel在线教育平台
    • Yii
    • Yii手机直播
    • CodeIgniter
    • Yaf
  • 移动开发
    • 微信公众号
    • 混合APP
  • 二次开发
    • DedeCMS
  • Linux
    • 基本操作
    • 环境搭建
  • 版本控制
    • GIT
    • SVN
  • Node.js
  • 资料库
没有结果
查看所有结果
  • 首页
  • 前端
    • HTML
    • CSS
    • Javascript
    • XML
    • AJAX
  • 前端框架
    • BootStrap
    • Jquery
  • PHP
    • 语法
    • 核心
    • 面向对象
    • PHP7
    • Socket
    • Swoole
  • 数据库
    • Mysql
    • Redis
    • Memcache
    • MongoDB
  • 优化
    • 优化方案
    • 页面静态化
    • Nginx
  • 后台框架与实战
    • Smarty
    • 源码Blog
    • TP3.2
    • TP3.2商城
    • TP5.0
    • TP5.0商城
    • Laravel
    • Laravel在线教育平台
    • Yii
    • Yii手机直播
    • CodeIgniter
    • Yaf
  • 移动开发
    • 微信公众号
    • 混合APP
  • 二次开发
    • DedeCMS
  • Linux
    • 基本操作
    • 环境搭建
  • 版本控制
    • GIT
    • SVN
  • Node.js
  • 资料库
没有结果
查看所有结果
没有结果
查看所有结果

Nginx 服务器集群、负载均衡、CDN

Mr.Lee 由 Mr.Lee
2018年5月21日
在 Nginx, 网站优化
0
Nginx 服务器集群、负载均衡、CDN
0
分享
8
浏览

Nginx与服务器集群

服务器介绍

1、概念(通俗理解)

服务器:就是没有显示器的电脑(比普通电脑配置高,并且有一个唯一的公网ip)

web服务器:就是一个软件(一般监听80端口,用户接口用户请求,响应请求给用户)

2、常用Web服务器

  • Apache

1)是世界上用的最多的Web服务器,它的优势在开源代码开放,功能完善,历史悠久,模块支持非常丰富,跨平台;缺点在于比其他web服务器内存占用高;

2)适用于动态网站。

  • Nginx

1)是一款轻量级的Web 服务器/反向代理服务器及电子邮件代理服务器,其特点是占有内存少,并发能力强,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等;

2)适用于反向代理服务器和静态资源服务器(注:线上公司都使用Linux安装)

  • IIS:

是windows系统上的服务器产品(微软公司提供)。主要是给.net和asp语言使用的,经过扩展也是可以支持PHP语言(不推荐使用)。

  • Lighttpd:(图片服务器)

是一个德国人领导的开源Web服务器软件,具有非常低的内存开销、cpu占用率低、效能好以及丰富的模块等特点。

web服务器市场使用排行:https://w3techs.com/

http://www.lvse.com/site/w3techs-com-83.html

3、静态资源服务器

  • 场景:

传统的web项目,一般都将静态资源存放在项目Public的目录下,这样做很方便获取静态资源,但是如果说web项目很大,用户很多,静态资源也很多时,服务器的性能明显下降。这种情况下一般都会需要一个静态资源的服务器。

  • 实现:通过nginx搭建,或者通过阿里云、七牛的对象存储
  • 大型项目分离好处(注:推荐静态资源使用新域名):

1、便于维护使用(举例:一个项目图片可以方便所有项目使用,如:jq等)

2、动静分离有利于CDN加速 (注:动静分离指后端处理数据文件和静态文件分离)

3、【新域名好处】便于缓存 (举例:请求的是同一文件,就不用再下载了)

4、【新域名好处】静态资源的http请求中不会携带无用的cookie。

5、【新域名好处】优化浏览器对同一域名进行请求的最大并发连接数限制(注:不同浏览器限制不同)

什么是静态资源服务器:就是单独存放静态资源资源的服务器(如:css、js、图片等)

如何搭建静态资源服务器:通过nginx

好处:比传统快

CDN服务器

  • 作用:大型项目加速网站访问速度
  • 说明:CDN服务器供应商在全国各个城市都有一个机房,用于后期缓存静态资源,

网站老板购买了CDN后,其网站用户访问时第一次去源服务器访问并缓存到用户最近的机房,下次直接去最近的机房(节点)访问。

5、大型项目架构

集群技术/冗余技术:将多台服务器集中在一起,实现同一业务。

负载均衡技术:将任务按照指定策略分布到集群环境中的服务器上。

主从复制:一主或多主一从或多从,当主服务器insert/update/delete动作,从服务器自动同步。

动静分离:动态资源和后端程序在不同的服务器上

读写分离:增/删/改在操作一台数据库,读操作另一个数据库

二、Nginx服务器

1、Nginx概述

Nginx是一款轻量级、高性能的Web 服务器或反向代理服务器或邮件服务器,因它的稳定性、丰富的功能集和低系统资源的消耗而闻名。

Tengine是由淘宝网发起的Web服务器项目。它在Nginx的基础上,针对大访问量网站的需求添

加了很多高级功能和特性。成功案例:淘宝网,天猫商城等。

官网:http://tengine.taobao.org/faq_cn.html

Nginx特点

占有内存少,并发能力强

3、Apache与Nginx服务器区别

  • Nginx相对 Apache的优点

轻量级,同样起web 服务,比apache 占用更少的内存及资源;

抗并发,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能

高度模块化的设计,编写模块相对简单;

社区活跃,各种高性能模块出品迅速;

  • Apache相对Nginx的优点

rewrite ,比nginx 的rewrite 强大;

模块超多,基本想到的都可以找到;

少bug ,nginx 的bug 相对较多;

超稳定;

  • 总结

Nginx – 静态资源服务器或反向代理服务器使用(对象存储代替)

Apache – 后端服务器

三、LNMP的安装与配置

1、Nginx的安装

1)依赖注意

模块依赖性:Nginx的一些模块需要其他第三方库的支持,例如gzip模块需要zlib 库,rewrite模块需要pcre库,ssl功能需要openssl库等。

pcre安装

shell> cd /php/tools

shell> tar -zxvf pcre-8.34.tar.gz #解压

shell> cd pcre-8.34 #进入解压目录

shell> ./configure && make && make install #配置、编译和安装


3)zlib压缩库

shell> cd /php/tools

shell> tar -zxvf zlib-1.2.5.tar.gz

shell> cd zlib-1.2.5

shell> ./configure # 这个配置编译命令不要加目录参数

shell> make && make install

4)Nginx安装

shell> cd /php/tools

shell> tar -zxvf nginx-1.8.1.tar.gz

shell> cd nginx-1.8.1

shell> mkdir -p /php/server/nginx

shell> ./configure –prefix=/php/server/nginx

shell> make && make install

2、管理Nginx

1)启动Nginx

shell> /php/server/nginx/sbin/nginx

通过浏览器查询是否启动成功,出现如下内容,则启动成功。

Nginx服务器默认80端口

需要关闭Linux服务器防火墙或者添加80端口例外(service iptables stop)

︴如果启动Nginx报错:libpcre.so.1: cannot

解决:

shell> ln -s /lib/libpcre.so.0.0.1 /lib/libpcre.so.1 (再重新启动nginx即可)

2)关闭Nginx服务

shell> /php/server/nginx/sbin/nginx -s stop

重启服务

shell> /php/server/nginx/sbin/nginx -s reload

3、配置文件(nginx.conf)

1)位置

2)说明

user 用户 用户组;

#有1个工作子进程,可以自行修改,一般为当前机器总cpu核心数的1到2倍

worker_processes 8;

events {

#单个后台worker process进程的最大并发链接数

#最大连接数 = worker_processes * worker_connections

worker_connections 1024; #这里指一个子进程最大允许连接1024

}

http { #这是配置http服务器的主要段

server { #虚拟主机段

location { #定位,把特殊的文件再次定位,如image目录单独处理或php单独处理

}

}

server { #虚拟主机段

location { #定位,把特殊的文件再次定位,如image目录单独处理或php单独处理

}

}

…….

}

每新增一个server则添加一个虚拟主机(推荐:使用include方式引入外部虚拟主机配置文件)

4、配置虚拟主机(Nginx)

1)概念(无需操作)

在nginx下配置虚拟主机非常简单,只需在nginx下http {} 中 增加一个server(填入如下配置)即可新增一个虚拟主机

server {

# 监听端口

listen 80;

# 绑定域名(多个之间用空格隔开)

server_name 待绑定的域名;

location / {

# 项目根目录

root /php/wwwroot/web1;

# 默认首页

index index.html index.htm;

}

}

主配置(nginx.conf)文件新增2个虚拟主机

  • 步骤1:打开Nginx主配置文件(nginx.conf)引入外部虚拟主机配置文件

shell> vi /php/server/nginx/conf/nginx.conf

在http{}中加入下属代码:

server {

# 监听端口

listen 80;

# 绑定域名(多个之间用空格隔开)

server_name n1.com;

location / {

# 项目根目录

root /php/wwwroot/web1;

# 默认首页

index index.html index.htm;

}

}

server {

# 监听端口

listen 80;

# 绑定域名(多个之间用空格隔开)

server_name n2.com;

location / {

# 项目根目录

root /php/wwwroot/web2;

# 默认首页

index index.html index.htm;

}

}

修改nginx.conf主配置文件强烈推荐先备份,如:cp -r nginx.conf nginx.conf.bak

  • 步骤2:创建虚拟主机目录

shell> mkdir -p /php/wwwroot/web1 /php/wwwroot/web2

shell> echo ‘this is n1.com’ > /php/wwwroot/web1/index.html

shell> echo ‘this is n2.com’ > /php/wwwroot/web2/index.html

  • 步骤3:重启服务即可

shell> /php/server/nginx/sbin/nginx -s reload

  • 步骤4:在本机修改hosts文件

流程:当打开本机浏览器输入n1.com或者n2.com会访问对用的IP的Linux服务器的80端口软件Nginx会让其访问对应的web项目。

注:后期需要增加虚拟主机,则继续上述步骤添加server即可

︴扩展:引入外部配置文件(同apache开启httpd-vhosts)

  • 说明:在主配置文件中新增多个虚拟主机,导致配置文件越来越大,不便于管理,

所以建议采取下述方案:一个虚拟主机对应一个配置文件。

  • 步骤1:打开Nginx主配置文件(nginx.conf)将刚新增的两个虚拟主机删除或注释
  • 步骤2:打开Nginx主配置文件(nginx.conf)引入外部虚拟主机配置文件

shell> vi /php/server/nginx/conf/nginx.conf

在http{}中加入:【include vhosts/*.conf;】

  • 步骤3:新建外部虚拟主机目录(vhosts)

shell> mkdir -p /php/server/nginx/conf/vhosts #用于存放虚拟主机文件(一个文件对应一个虚拟主机)

  • 步骤4:新建新建虚拟主机

shell> cd /php/server/nginx/conf/vhosts

shell> vi nginx1.conf

server {

# 监听端口

listen 80;

# 绑定域名(多个之间用空格隔开)

server_name n1.com;

location / {

# 项目根目录

root /php/wwwroot/web1;

# 默认首页

index index.html index.htm;

}

}

  • 步骤4:重启服务即可

shell> /php/server/nginx/sbin/nginx -s reload

注:后期需要增加虚拟主机,则在【/php/server/nginx/conf/vhosts】目录下新建【xxx.conf】以conf

结尾的文件然后填写server即可。

5. 安装php并与nginx整合(php-fpm)

1)说明

php安装可以作为Apache模块存在,同时也可以单独的作为一个服务运行(端口是9000端口),这种单独运行的模式叫做php-fpm模式,在5.3.3+以后的版本都默认支持,以前的版本需要打补丁。

2)安装libxml2(否则配置php报错)

shell> cd /php/tools

shell> tar zxvf libxml2-2.7.2.tar.gz

shell> cd libxml2-2.7.2

shell> ./configure

shell> make && make install

3)安装PHP

shell> cd /php/tools

shell> tar -zxvf php-5.6.31.tar.gz

shell> cd php-5.6.31

shell> ./configure –prefix=/php/server/php –enable-fpm

注意:–enable-fpm该选项是指,以独立进程的方式来安装PHP。

shell> make && make install

复制php.ini配置文件到指定目

shell> \cp php.ini-development /php/server/php/lib/php.ini

php.ini 在php源代码解压文件目录里

4)管理PHP服务

shell> /php/server/php/sbin/php-fpm # 启动服务

shell> killall php-fpm # 关闭服务

︴启动服务报错:

ERROR: failed to open configuration file ‘/xxxx/php/etc/php-fpm.conf

cp \

/php/server/php/etc/php-fpm.conf.default \

/php/server/php/etc/php-fpm.conf

注:注意修改红色PHP安装路径

查看是否启动成功

5)让nginx支持PHP

步骤1:虚拟主机添加

location ~ \.php$ {

root 虚拟主机路径;

fastcgi_pass 127.0.0.1:9000;

fastcgi_index index.php;

fastcgi_param SCRIPT_FILENAME 虚拟主机路径/$fastcgi_script_name;

include fastcgi_params;

}

步骤2:重启nginx即可

shell> /php/server/nginx/sbin/nginx -s reload

四、配置expires缓存功能

1、expires缓存功能概述

  • 作用:设置expires减少不必要的http请求
  • 场景:将静态资源(css、js、图片)等缓存到客户端,减轻服务区压力

浏览器默认也有缓存机制,通过expires统一缓存时间

校验文件缓存是否过期 Expires(http1.0)、Cache-Control:max-age=秒(http1.1)

协议中Etag头信息校验 Etag (请求:If-None-Match)

Last-Modified头信息校验 Last-Modified (请求:If-Modified-Since)


2、详细配置

对nginx 来说,实现的方法很简单,只要在location段中,使用 expires 就可以了

格式。

步骤1:打开虚拟主机配置

location ~ \.(gif|jpg|jpeg|png|bmp|ico)$ {

root /php/wwwroot/web1;

expires 1d; #1d (天) 1h(时) 1m(分) 1s(秒)

}

步骤2:重启nginx

案例

谷歌浏览器不出现:from cache可能是系统时间导致

验证:

date命令 – 查看系统时间

步骤:

date -s ‘日期’ – 修改系统时间(注:执行该命令后必须clock -w 写入到系统中)

总结

expires作用:减少不必要的http请求

问:部分浏览器默认支持expires功能,为甚还需要自己设置?

答:自定义过期时间

问:如何验证expires是否设置成功?

答:看network的响应头信息 cache-control

五、开启gzip压缩

1、开启gzip的好处

gzip开启以后会将输出到用户浏览器的数据进行压缩的处理,这样就会减小通过网络传输的数据量,提高浏览的速度。(以空间换时间,以时间换空间)

配置

步骤1:打开虚拟主机配置文件

gzip on; #开启Gzip压缩

gzip_min_length 1k; #不压缩临界值,大于1K的才压缩

gzip_comp_level 6; #压缩级别(1-9)越大越慢,同时也最消耗CPU

#声明压缩文件(MIME类型)

gzip_types text/plain application/x-javascript text/css application/xml text/javascript image/jpeg;

gzip_disable “MSIE [1-6]\.”; #禁用IE1-6

步骤2:重启nginx

—————————————————-

开启成功标识

压缩前

压缩后

负载均衡配置

1、负载均衡图

2、nginx支持的三种负载均衡策略

轮询:将请求依次轮询发给每个服务器。

最少链接:将请求发送给持有最少活动链接的服务器。

ip哈希:通过哈希函数决定请求发送给哪个服务器。

权重:服务器的权重越高,处理请求的概率越大。

3、轮询负载均衡

http {

#设定负载均衡的服务器列表 phpServers 可以写网址或ip或其他英文

upstream phpServers {

server 服务器IP:端口;

server 服务器IP:端口;

server 服务器IP:端口;

}

server {

listen 80;

location / {

# 当80端口有请求的时候交给上面定义的负载均衡器处理(phpServers )

proxy_pass http://phpServers ;

}

}

}

4、最少链接负载均衡

http {

upstream CashServers {

least_conn;

server 服务器IP:端口;

server 服务器IP:端口;

server 服务器IP:端口;

}

server {

listen 80;

location / {

proxy_pass http://CashServers;

}

}

}

最少链接负载均衡通过least_conn指令定义;

此负载均衡策略适合请求处理时间长短不一造成服务器过载的情况;

5、ip哈希负载均衡

http {

upstream CashServers {

ip_hash;

server 服务器IP:端口;

server 服务器IP:端口;

server 服务器IP:端口;

}

server {

listen 80;

location / {

proxy_pass http://CashServers;

}

}

}

ip哈希负载均衡使用ip_hash指令定义;

nginx使用请求客户端的ip地址进行哈希计算,确保使用同一个服务器响应请求;

此策略适合有状态服务,比如session;

6、权重

http {

upstream CashServers {

可以加最少连接负载均衡参数

或者加ip哈希负载均衡参数

server 服务器IP:端口 weight=3;

server 服务器IP:端口 weight=2;

server 服务器IP:端口 weight=1;

}

server {

listen 80;

location / {

proxy_pass http://CashServers;

}

}

}

权重负载均衡需要使用weight指令定义;

权重越高分配到需要处理的请求越多;

此策略可以与最少链接负载和ip哈希策略结合使用;

此策略比较适合服务器的硬件配置差别比较大的情况;

七、动静分离

步骤1:打开负载均衡服务器主配置文件(vi /php/server/nginx/conf/nginx.conf)

步骤2:重启nginx即可

八、SESSION共享

1、说明

明确:session存储在服务端

发现:由于实现了负载均衡导致,如果是轮询策略导致session丢失

解决

  • 使用ip哈希负载均衡策略
  • session入库(将session保存到数据库中)

如果有a网站和b网站,希望a网站登录成功后b网站自动登录(注:登录肯定用session存储)

答:大公司解决方法,修改session存储方式数据库(memcache)

扩展

  • 一键安装包网站:http://lnmp.org/

  • 淘宝的tengine:http://tengine.taobao.org/
  • 中文站点:http://www.nginx.cn/doc/

标签: CDN服务器集群负载均衡
上一篇文章

Linux(一)安装、命令、目录

下一篇文章

MongoDB 存储方式、命令、增删改查、索引

下一篇文章
MongoDB 存储方式、命令、增删改查、索引

MongoDB 存储方式、命令、增删改查、索引

发表回复 取消回复

您的邮箱地址不会被公开。 必填项已用 * 标注

Search

没有结果
查看所有结果

About Me

个人随笔

Winston Lee

Programmer

Hello & welcome to my blog! My name is Winston Lee and am a programmer and am keen on sharing.

Winston Lee

About Me

Hello & welcome to my blog! My name is Winston Lee and am a programmer and am keen on sharing.

Categories

  • AJAX
  • BootStrap
  • CodeIgniter
  • CSS
  • DedeCMS
  • GIT
  • HTML
  • Javascript
  • Jquery
  • Laravel
  • Laravel在线教育平台
  • Linux
  • Memcache
  • MongoDB
  • MVC
  • Mysql
  • Nginx
  • Node
  • PDO
  • PHP
  • PHP7
  • PHP基本语法
  • PHP核心编程
  • Redis
  • Smarty
  • Socket
  • SVN
  • Swoole
  • TP3.2
  • TP3.2商城
  • TP5.0
  • TP5.0商城
  • XML
  • Yaf
  • Yii
  • Yii手机直播
  • 二次开发
  • 优化方案
  • 前端技术
  • 前端框架
  • 后台框架
  • 基本操作
  • 微信公众号
  • 数据库
  • 未分类
  • 混合APP
  • 源码Blog项目
  • 版本控制
  • 环境搭建
  • 移动端开发
  • 网站优化
  • 资料
  • 面向对象
  • 面向对象编程
  • 页面静态化

Tags

DOM Json RBAC 事件 传参 函数 分页 判断语句 匿名函数 变量 图片上传 存储过程 安装 对象 封装 属性 接口 控制器 数据库操作 数据类型 数据表 数组 文件上传 无刷新分页 权限 标签 模型 正则 流程控制 目录结构 算法 类 索引 继承 缩略图 表关系 视图 路由 运算符 选择器 递归 配置 错误处理 页面静态化 验证码
  • 首页
  • 前端
  • 前端框架
  • PHP
  • 数据库
  • 优化
  • 后台框架与实战
  • 移动开发
  • 二次开发
  • Linux
  • 版本控制
  • Node.js
  • 资料库

沪公网安备31011502400873 | 沪ICP备2024050435号-3

没有结果
查看所有结果
  • 首页
  • 前端
    • HTML
    • CSS
    • Javascript
    • XML
    • AJAX
  • 前端框架
    • BootStrap
    • Jquery
  • PHP
    • 语法
    • 核心
    • 面向对象
    • PHP7
    • Socket
    • Swoole
  • 数据库
    • Mysql
    • Redis
    • Memcache
    • MongoDB
  • 优化
    • 优化方案
    • 页面静态化
    • Nginx
  • 后台框架与实战
    • Smarty
    • 源码Blog
    • TP3.2
    • TP3.2商城
    • TP5.0
    • TP5.0商城
    • Laravel
    • Laravel在线教育平台
    • Yii
    • Yii手机直播
    • CodeIgniter
    • Yaf
  • 移动开发
    • 微信公众号
    • 混合APP
  • 二次开发
    • DedeCMS
  • Linux
    • 基本操作
    • 环境搭建
  • 版本控制
    • GIT
    • SVN
  • Node.js
  • 资料库

沪公网安备31011502400873 | 沪ICP备2024050435号-3