Nginx+httpd反代实现动静分离-wx5b0f4cbe878c2的博客

Windows Windows 2个月前 (08-15) 5次浏览 未收录 0个评论 扫描二维码

什么是动静分离

为了提高网站的响应速度,减轻程序服务器(apache+php,nginx+php等)的负载,对于静态资源比如图片,js,css,html等静态文件,我们可以在反向代理服务器中设置,将访问不同类型的资源分别调度到后端不同服务器组,这样客户端请求一个静态资源时,代理服务器将请求代理到静态资源服务器组。用户请求的动态文件比如php,jsp则转发给后端php服务器或tomcat应用服务器处理,这就是动静分离。这也是反向代理服务器的一个重要的作用。

本文的动静分离主要是通过nginx+httpd和php+nginx来实现,其中一台nginx作为前端反向代理服务器负责分离用户访问的请求,httpd+php处理php的动态请求,另外一台nginx处理图片、html、JS、CSS等静态文件。

基础知识了解完后,咱们来具体实践一下动静分离的感觉。。

环境介绍

Nginx+httpd反代实现动静分离-wx5b0f4cbe878c2的博客

服务器名称 系统类型 预装的软件 ip地址 域名
nginx代理服务器 Centos7.5 nginx 192.168.2.221 http://www.aa1.com
httpd+php动态解析服务器 Centos7.5 httpd+php 192.168.2.222 http://www.aa2.com
静态资源服务器 Centos7.5 nginx 192.168.2.225 http://www.aa5.com

????1、代理服务器:????????服务:Nginx,并配置代理与动静分离到后端两台动态与静态服务器上

????2、动态服务器:????????????服务:httpd、PHP,负责处理客户端请求php动态页面

????3、静态服务器

????????服务:nginx,负责处理客户端请求的图片、js、css、html等静态资源

配置过程

一、配置前的初始配置,配置好ip地址、关闭防火墙、selinux、配置hosts解析文件(使用虚拟主机的不同域名)实现各主机互访;这个步骤三个主机都操作,我只操作一个

c#;toolbar:false">[root@centos01?/]#?systemctl?stop?firewalld
[root@centos01?/]#?setenforce?0
[root@centos01?/]#?vim?/etc/hosts
192.168.2.221???www.aa1.com
192.168.2.222???www.aa2.com
192.168.2.225???www.aa5.com

二、给各服务器安装需要的软件

代理服务器安装nginx软件

[root@centos01?/]#?yum?install?-y?nginx

httpd+php服务器安装软件

[root@centos02?/]#?yum?install?-y?php?php-mysql?php-mbstring?php-gd?php-common?httpd

静态服务器安装软件

[root@centos03?/]#?yum?install?-y?nginx

三、各服务器配置参数

配置httpd+php服务器

????1.配置httpd支持php解析,添加index.php主页支持,添加在httpd配置调用php模块

[root@centos02?/]#?vim?/etc/httpd/conf/httpd.conf?
<IfModule?log_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>
<IfModule?dir_module>
????DirectoryIndex?index.php?index.html
</IfModule>
...略
????AddType?application/x-httpd?.php
...略
????LoadModule?php5_module?modules/libphp5.so

????2.在网站根目录新建一个php测试页,将httpd服务加入开启自启然后启动httpd服务

[root@centos02?/]#?vim?/var/www/html/index.php
<?php
phpinfo();
?>
[root@centos02?/]#?systemctl?enable?httpd
Created?symlink?from?/etc/systemd/system/multi-user.target.wants/httpd.service?to?/usr/lib/systemd/system/httpd.service.
[root@centos02?/]#?systemctl?start?httpd

????3.使用客户端添加hosts解析,浏览器访问http://www.aa2.com 验证php解析是否正常

Nginx+httpd反代实现动静分离-wx5b0f4cbe878c2的博客

配置nginx代理服务器

????1.新建一个虚拟主机配置文件,添加代理服务器配置参数

[root@centos01?/]#?vim?/etc/nginx/conf.d/proxy.conf
server?{
????????listen?80;
????????server_name?www.aa1.com;
#设置真实客户端的ip地址
????????proxy_set_header?X-Real-IP?$remote_addr;
????????proxy_set_header?X-Forwarded-For?$proxy_add_x_forwarded_for;
#匹配php请求,将请求转发到动态服务器组
????????location?~*?\.php$?{
????????proxy_pass?http://www.aa2.com;
????????}
#匹配直接访问流量,将请求转发到动态服务器组
????????location?/?{
????????proxy_pass?http://www.aa2.com;
????????}
#匹配以静态资源后缀结尾的,将请求转发到静态服务器组
????????location?~*?\.(png|jpg|jpeg|html|htm|js|css|xml)$?{
????????proxy_pass?http://www.aa5.com;
????????}
}

????2.检查nginx配置文件语法是否正确并启动nginx代理服务

[root@centos01?/]#?nginx?-t?
[root@centos01?/]#?nginx?
[root@centos01?/]#?ss?-tnl?|?grep?80

????3.使用客户端访问代理服务器域名www.aa1.com验证动态资源反代是否成功

Nginx+httpd反代实现动静分离-wx5b0f4cbe878c2的博客

静态服务器配置

????1.新建静态web虚拟主机,配置静态资源网站根目录,配置访问日志格式使用proxy格式(显示真实的客户端ip地址)

[root@localhost?/]#?vim?/etc/nginx/conf.d/static.conf
server?{
????????listen?80;
????????server_name?www.aa5.com;
????????access_log?/var/log/nginx/accecc.log?proxy;
????????location?/?{
????????root?/web/;
????????}
}

????2.修改静态服务器主配置文件,添加一个proxy日志格式(名称一定和上面一致);测试配置文件语法是否正确,启动nginx服务

[root@localhost?/]#?vim?/etc/nginx/nginx.conf?
http?{
...略
????log_format??proxy??'$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>This?is?static?server?resources?<h1>

最后的结果验证

????方法一:

????1.使用客户端访问http://www.aa1.com/index.php或者直接访问主页,结果反馈的是httpd+php服务器的php信息页面

Nginx+httpd反代实现动静分离-wx5b0f4cbe878c2的博客

????2.客户端访问代理服务器http://www.aa1.com/aa5.html的静态html页面,结果返回的是静态服务器上面的静态资源网页(httpd服务器没有)

Nginx+httpd反代实现动静分离-wx5b0f4cbe878c2的博客

????方法二:搭建phpMyAdmin网站程序验证动静分离

????1.将phpMyAdmin的网站源码上传至httpd网站根目录并解压,然后客户端访问代理服务器http://www.aa1.com/查看结果;可以看到php页面可以访问,静态图片无法正常显示

???????Nginx+httpd反代实现动静分离-wx5b0f4cbe878c2的博客

????2.将phpMadmin源码上传到静态服务器网站根目录,然后再次访问代理服务器的www.aa1.com网页查看结果(可以发现页面已经显示正常)

Nginx+httpd反代实现动静分离-wx5b0f4cbe878c2的博客

喜欢 (0)
[]
分享 (0)
关于作者:
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址