Nginx与服务器集群
一.集群
1. 什么是集群
集:合在一起 放在一起
群:一堆 很多
服务器架构集群:多台服务器组成的响应大并发,高数据量的架构体系。
分布式服务器架构
特点:
(1)成本高
(2)能够降低单台服务器的压力,使用流量平均分配到多台服务器
(3)使网站服务架构更加安全稳定
服务器概念: 提供某种或多种服务(功能)的机器(计算机)
(1)硬件 性能比较好的电脑主机
(2)软件 实现各种服务支持的协议的软件
1.1 web服务软件
提供http https协议的服务器。网站网页访问的功能
Apache 老牌的服务器软件,功能多并且稳定 ,支持多种配置,lamp
Nginx 安装简单小巧,并发量高,web服务器,代理服务器,邮箱服务器
lls 微软公司,APS脚本使用,可以通过fast-cgi(网络接口服务)的方式使用PHP
Lighttpd 德国开发的软件,小巧,提供web服务支持
1.2 数据库
关系型数据库(RDBMS):
Mysql mysqlab => sun(java) => Oracle
Mariadb mysql的一个分支
Postgresql 加州伯克利大学,学院派
Oracle 大型商业数据库
Sqlserver 微软数据库
DB2 IBM
Sqllite3 手机端(iOS和安卓)使用
非关系型数据库
Memcached
Redis
Mongodb
1.3 负载均衡
负载均衡服务器,分发请求到不同的服务器。使流量平均分配。
服务器死机,称为宕(dang)机
硬件级别 性能好,价格高
软件级别 性价比高
Lvs linux下分发软件
Nginx upstream功能分发
1.4 资源服务器
资源服务器存储静态资源,css,js,图片,视频..。一般此服务器会有硬板(ssd)读写快速,带宽更大。
1.5 反向代理
反向代理服务器具有代理请求到对应的服务器的功能,也具有缓存的功能
代理服务器:
比如a需要访问c,但是a不能直接访问c。
(1)b可以访问c,a可以访问b
(2)a告诉b帮忙访问一下c,把c的数据返回给a
Spuid :
Varnish :
Nginx :
1.6 高可用
高可用服务器,用来监控负载均衡服务器,如果一旦负载均衡宕机,会接替负载均衡服务器的工作,继续进行网络分发的工作。可以认为是负载均衡的备用服务器
Hearbit 心脏敲击
Keeplive 保持
1.7 缓存软件
Memcached
redis
1.8 cdn内容分发
需求:
网站服务器在北京
用户1:天津 --> 北京节点 用户访问CDN 服务器
用户2:杭州 --> 上海节点
二. Nginx服务器
1. Nginx概述
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。
其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
2. Nginx特点
(1)热部署:Nginx在修改配置文件之后,不需要重启,重载操作
(2)可以高并发连接:相同配置的服务器,nginx比apache能接受的连接多得多
(3)低的内存消耗:相同的服务器,nginx比apache低的消耗
(4)处理响应请求很快:nginx处理静态文件的时候,响应速度很快
(5)具有很高的可靠性
3. Apache与Nginx服务器区别
1)nginx和apache的软件底层架构不一样。
(1)Nginx的并发要比Apache好很多。
(2)Nginx属于轻量级服务器软件,Apache属于重量级的软件;
(3)Nginx在处理静态文件的效率要比Apache好很多,Apache在处理动态页面效果要 比Nginx高
(4)Apache在安全性要比Nginx要好。
因此有一种不常用的组合:lnamp。LNMPA
2)运行模式不同
(1)Apache运行PHP是通过加载PHP5模块运行。由于是Apache去加载PHP5模块, 所以每次修改了php.ini配置文件需要重启Apache。
(2)Nginx运行PHP是通过网络连接php-fpm(fastCGI)方式运行.php-fpm是一个独立的 软件(默认端口:9000)。因此在Nginx下修改了php.ini配置文件需要重启php-fpm
三. LNMP的安装配置
在之前的LAMP基础上安装,节省安装Mysql时间
由于
安装Nginx+php和apache+php的使用方式不同,所以重新安装php
(1)软件包和脚本上传到服务器
使用工具:FileZilla(https://filezilla-project.org/)
(2)查看并执行install_nginx.sh脚本
赋予脚本权限,并执行安装脚本: chmod u+x install_*
执行脚本:
1. Nginx配置文件详解:
配置文件路径
查看主配置文件
查看文件有时可能不方便,可以使用sftp工具连接文本编辑器进行设置查看
2. 设置工作进程数量
3. 单个进程的连接数(并发量)
4. 虚拟主机的配置
#user nobody;
worker_processes 1; # 设置工作进程数量
events {
worker_connections 1024; # 单个进程的连接数(并发量)
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
# 负载均衡服务器配置
upstream nginx {
# ip_hash hash一致性让同一个用户访问同一台服务器(解决session丢失问题)
ip_hash;
# 192.168.174.130 分发到的服务器
# weight 权重
# max_fails 分发最大失败次数
# fail_timeout 失败超时时间
server 192.168.174.130:8080 weight=1 max_fails=3 fail_timeout=20s;
server 192.168.174.131:8081 weight=1 max_fails=3 fail_timeout=20s;
}
# 配置解压缩
gzip on;
# http的协议版本
gzip_http_version = 1.0;
# 如果是IE就关闭压缩
gzip_disable 'MSIE [1-6].';
# 需要压缩的文件格式(不建议压图片可以压缩css,js)
gzip_types image/jpeg;
# 推荐6 压缩级别(级别越高,压的越小,越浪费CPU计算资源)
#gzip_comp_level [1-9]
# 复制一个server端,创建一个新的虚拟机
server {
# 默认端口
listen 80;
# 域名解析
server_name www.xfsec.com;
# 网站根目录
root /home/xing/xing/project
# 缓存图片文件
location ~ .(jpeg|jpj|png)${
# 缓存时间为1day
expires 1d;
}
# 默认访问页
location / {
# 网站根目录
# root /home/xing/xing/project
# 分发代理
proxy_pass http://nginx;
index index.html index.htm
}
error_page 500 502 503 504 /50x.html;
# 配置错误页面
location = /50x.html {
root html;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000配置PHP服务
location ~ .php$ {
# 使用最上层的root变量
# root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# 如果Apache和nginx的网站目录是一个,Apache需要使用分布式配置文件,开启此项。
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /.ht {
# deny all;
#}
}
server {
listen 8080;
server_name localhost;
location / {
proxy_pass http://192.168.1.60;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
5.启动nginx看看效果
(1)启动Nginx
(2)解析域名,建立网站目录并访问:C:WindowsSystem32driversetc(hosts文件)
四.Nginx和PHP关联
1. 安装php-fpm
①查看修改脚本
执行结果查看软件目录
②复制PHP相关配置文件
③启动php-fpm
2. Nginx +PHP流程图
3. Nginx.conf配置修改
①配置php服务的路径
②测试配置文件并重载
③测试phpinfo文件
五.配置nginx expires缓存功能
1. Nginx 缓存功能概述
Nginx通过配置,可以告知浏览器,返回数据的有效时间,浏览器就可以根据数据的有效时间,确定是否应该到服务器请求,如果数据没有超过有效期,就使用浏览器缓存的数据。
缓存功能开启,是为了用户能够快速获取使用到数据,可以减少服务器请求,降低贷款压力。
2. Nginx.conf详细配置
①配置缓存选项
②上传图片,并测试访问
③重载配置文件
六. Nginx的gzip压缩设置
1. Nginx的gzip压缩功能概述
压缩资源,通过网络发送的大小就更加节省资源了,带宽占用变小,启用压缩机制,为了能够快速访问到资源。
Web服务器进行压缩,浏览器需要进行解压操作。
目前市场大部分浏览器是支持gzip压缩的。
IE6及以前不支持
2. Nginx.conf详细配置
配置文件参数保存之后,上传配置文件
七.负载均衡的配置
1. 负载均衡原理图
此架构最少需要三台服务器
通过虚拟机克隆的方式,快速拥有多态虚拟机。
负载均衡服务器nginx,
192.168.174.126
Web1
192.168.174.130
Web2
192.168.174.131
克隆虚拟机操作步骤:
克隆虚注意拟机必须处于关机状态
2. 实战Nginx负载均衡服务器
①配置负载均衡服务器
分发段配置
访问域名找虚拟主机,通过虚拟主机,代理到upstream,upstream分发到各web服务器
Windows域名解析
②启动各服务器
负载均衡服务器只需启动nginx,不在进行PHP解析
Web服务器启动nginx和php-fpm服务
Web1服务器
Web2服务器
③查看分发效果
为了能够看到分发效果,在web1和web2服务器页面写入不同的测试标识
Web1
[root@localhost 桌面]# vim/usr/local/nginx/html/php61/index.html
<meta charset=”utf8”>
Web2
<h1>时间过得好快呀,又饿了</h1>
Web2
[root@localhost 桌面]# vim/usr/local/nginx/html/php61/index.html
<meta charset=”utf8”>
Web2
<h1>时间过得好快呀,又饿了</h1>
3. SESSION丢失问题
不同的服务器需要通过session判断用户的状态。
默认session存储到服务器的硬盘文件中,不能够共享。
session丢失会造成以下后果:
- 用户状态无法判断
- 验证码没有办法验证,验证码的生成值和校验的服务器不在一起
解决方案:
- 入库 memcache mysql redis(推荐)
- 硬盘共享方式 磁盘共享方式
- ip_hash hash一致性让同一个用户访问同一台服务器