企业中,随着用户的增长,数据量也几乎成几何增长,数据越来越大,随之也就出现了各种应用的瓶颈问题。
问题出现了,我们就得想办法解决,一般网站环境,均会使用LAMP或者LNMP,而我们对于网站环境的优化,除了对源代码进行优化、SQL慢查询优化 、SQL创建索引等之外,我们还可以对环境架构进行优化与扩展。
因此,我们引入了 Nginx 对站点实现负载均衡和动静分离,来加快访问速度。
二、Nginx 动静分离与负载均衡的实现机制
Nginx 动静分离与负载均衡的的实现离不开反向代理,什么是反向代理呢?反向代理主要应用于集群环境中,有多个客户端给Nginx服务器发送的请求,当 Nginx 服务器接收到之后,会按照一定的规则将请求分发给了后端的业务处理服务器,此时,请求的来源也就是客户端,是明确的,但是请求具体由哪台服务器处理,并不明确,在这里,Nginx 所扮演的就是一个反向代理角色。通过反向代理,我们无法直接看到后端服务器的服务器信息,因此反向代理具有隐藏业务服务器的作用!
三、Nginx 反向代理实现
1、网络拓扑
2、环境准备
我们准备好7台服务器,2 台 MySQL 数据库做高可用,4 台 Web 服务器,其中 2 台装 Nginx+PHP 做动态页面的负载均衡,另外 2 台装 Apache+PHP 做静态页面的负载均衡,1 台 Nginx 服务器,做反向代理服务器。
至于,服务器环境的安装部署,这里就不进行操作了,如有疑问的,可以留言或者查看小弟前面的文章。
3、Nginx 服务器中 Nginx 服务配置文件修改
修改 http 部分
[root@nginx ~]# vim /usr/local/nginx/conf/nginx.conf
1、重新定义 Nginx 服务的日志记录格式,关于关键字的释义,大佬们可以参阅官网。
2、使用 upstream 关键字定义后端服务器
格式:uptream + 后端节点组名称(可自定义)
server + IP地址 + 权重 + 最大失败次数 + 失败超时时间 意思是:当后端节点连续两次在3秒内无法连接时,将放弃连接该节点,Nginx 将客户端请求发送给下一节点。
修改 server 部分,这里配置为 Nginx 虚拟机
[root@nginx ~]# vim /wdata/nginx/config/80.conf
1、配置 Nginx location 匹配
分别配置以 .html 、.jpeg 、.jpg 、.gif 、.png 、.php 为扩展名的文件的 location 规则。
proxy_set_header:允许重新定义或添加字段传递给代理服务器的请求头。该值可以包含文本、变量和它们的组合。在本例中意思将真实的客户端地址添加到代理服务器的请求头中。
proxy_pass:设置反向代理的连接,格式为:proxy_pass + 后端节点组的名称; 。
X-Forwarded-For:简称 XFF 头,它代表客户端,也就是 HTTP 的请求端真实的 IP ,只有在通过了 HTTP 代理或者负载均衡服务器时才会添加该项。
$remote_addr:远端地址,也就是客户端 IP 地址
2、配置站点日志,这里将日志格式指定为我们在 HTTP 部分配置为的 main 规则。
Nginx 反向代理的配置请参照图中进行修改,其他详细的配置参数,请参阅官网,后续继续更新。
四、后端 Nginx 服务节点配置
后端 Nginx 服务器节点主要用来做以 .php 扩展名结尾的站点文件的访问和图片文件的访问,做到将图片资源单独剥离,以降低服务器负载。
1、配置以 .php 为扩展名的站点服务器
[root@weba config]# vim 80.conf
如上图:
a、listen:配置监听端口,这里配置为 80 端口,在生产环境中,我们可能会配置成 443 端口。
server_name:配置域名,这里是实验环境,因此采用默认未配置域名。
index:配置支持的文件类型
root:配置全局站点路径
b、配置局部站点路径、fastcgi的地址端口(指的是php-fpm的监听地址及端口)、所支持的文件类型等
c、配置日志文件
Nginx 站点的配置大概做到这种配置,基本就可以进行访问,如果在企业中需要更复杂的配置,请参考官方文档。
2、配置单独的图片资源站点
[root@weba config]# vim 81.conf
如上图:
配置方式跟 1 的配置完全一样,只是修改一下图片资源的路径即可。
WebA 和 WebB 的配置完全一样。最后修改完配置别忘了刷新,用命令:service nginx reload 即可
五、后端 Apache 服务节点配置
1、Apache 服务节点的配置基本也跟 Nginx 差不多,我们这里使用命令修改 Apache 配置文件。