什么是动静分离
为了提高网站的响应速度,减轻程序服务器(apache+php,nginx+php等)的负载,对于静态资源比如图片,js,css,html等静态文件,我们可以在反向代理服务器中设置,将访问不同类型的资源分别调度到后端不同服务器组,这样客户端请求一个静态资源时,代理服务器将请求代理到静态资源服务器组。用户请求的动态文件比如php,jsp则转发给后端php服务器或tomcat应用服务器处理,这就是动静分离。这也是反向代理服务器的一个重要的作用。
本文的动静分离主要是通过nginx+httpd和php+nginx来实现,其中一台nginx作为前端反向代理服务器负责分离用户访问的请求,httpd+php处理php的动态请求,另外一台nginx处理图片、html、JS、CSS等静态文件。
基础知识了解完后,咱们来具体实践一下动静分离的感觉。。
环境介绍
1、代理服务器:
服务:Nginx,并配置代理与动静分离到后端两台动态与静态服务器上
2、动态服务器:
服务:httpd、PHP,负责处理客户端请求php动态页面
3、静态服务器
服务:nginx,负责处理客户端请求的图片、js、css、html等静态资源
配置过程
一、配置前的初始配置,配置好ip地址、关闭防火墙、selinux、配置hosts解析文件(使用虚拟主机的不同域名)实现各主机互访;这个步骤三个主机都操作,我只操作一个
[root@centos01/]#systemctlstopfirewalld[root@centos01/]#setenforce0[root@centos01/]#vim/etc/hosts192.168.2.192.168.2.192.168.2.
二、给各服务器安装需要的软件
代理服务器安装nginx软件
[root@centos01/]#yuminstall-ynginx
httpd+php服务器安装软件
[root@centos02/]#yuminstall-yphpphp-mysqlphp-mbstringphp-gdphp-commonhttpd
静态服务器安装软件
[root@centos03/]#yuminstall-ynginx
三、各服务器配置参数
配置httpd+php服务器
1.配置httpd支持php解析,添加index.php主页支持,添加在httpd配置调用php模块
[root@centos02/]#vim/etc/httpd/conf/httpd.conf<IfModulelog_config_module>LogFormat"%{X-Real-IP}i%l%u%t\"%r\"%>s%b\"%{Referer}i\"\"%{User-Agent}i\""proxylog##代理的请求日志格式CustomLog"logs/access_log"proxylog##调用代理的日志格式(显示真实客户端ip地址,默认日志只显示代理服务器ip)</IfModule><IfModuledir_module>DirectoryIndexindex.phpindex.html</IfModule>...略AddTypeapplication/x-httpd.php...略LoadModulephp5_modulemodules/libphp5.so
2.在网站根目录新建一个php测试页,将httpd服务加入开启自启然后启动httpd服务
[root@centos02/]#vim/var/www/html/index.php<?phpphpinfo();?>[root@centos02/]#systemctlenablehttpdCreatedsymlinkfrom/etc/systemd/system/multi-user.target.wants/httpd.serviceto/usr/lib/systemd/system/httpd.service.[root@centos02/]#systemctlstarthttpd
3.使用客户端添加hosts解析,浏览器访问 验证php解析是否正常
配置nginx代理服务器
1.新建一个虚拟主机配置文件,添加代理服务器配置参数
[root@centos01/]#vim/etc/nginx/conf.d/proxy.confserver{listen80;;#设置真实客户端的ip地址proxy_set_headerX-Real-IP$remote_addr;proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for;#匹配php请求,将请求转发到动态服务器组location~*\.php${proxy_pass;}#匹配直接访问流量,将请求转发到动态服务器组location/{proxy_pass;}#匹配以静态资源后缀结尾的,将请求转发到静态服务器组location~*\.(png|jpg|jpeg|html|htm|js|css|xml)${proxy_pass;}}
2.检查nginx配置文件语法是否正确并启动nginx代理服务
[root@centos01/]#nginx-t[root@centos01/]#nginx[root@centos01/]#ss-tnl|grep80
3.使用客户端访问代理服务器域名验证动态资源反代是否成功
静态服务器配置
1.新建静态web虚拟主机,配置静态资源网站根目录,配置访问日志格式使用proxy格式(显示真实的客户端ip地址)
[root@localhost/]#vim/etc/nginx/conf.d/static.confserver{listen80;;access_log/var/log/nginx/accecc.logproxy;location/{root/web/;}}
2.修改静态服务器主配置文件,添加一个proxy日志格式(名称一定和上面一致);测试配置文件语法是否正确,启动nginx服务
[root@localhost/]#vim/etc/nginx/nginx.confhttp{...略log_formatproxy'$http_x_forwarded_for-$remote_user[$time_local]"$request"''$status$body_bytes_sent"$http_referer"''"$http_user_agent""$http_x_forwarded_for"';...略}[root@localhost/]#nginx-t[root@localhost/]#nginx
3.创建静态网站根目录,新建一个静态页面文件
[root@localhost/]#mkdir/web[root@localhost/]#vim/web/aa5.html<h1>Thisisstaticserverresources<h1>
最后的结果验证
方法一:
1.使用客户端访问/index.php或者直接访问主页,结果反馈的是httpd+php服务器的php信息页面
2.客户端访问代理服务器/aa5.html的静态html页面,结果返回的是静态服务器上面的静态资源网页(httpd服务器没有)
方法二:搭建phpMyAdmin网站程序验证动静分离
1.将phpMyAdmin的网站源码上传至httpd网站根目录并解压,然后客户端访问代理服务器/查看结果;可以看到php页面可以访问,静态图片无法正常显示
2.将phpMadmin源码上传到静态服务器网站根目录,然后再次访问代理服务器的网页查看结果(可以发现页面已经显示正常)