nginx动静分离实战

通过负载均衡中间件,将动态请求和静态请求进行分离。这样做的好处是,加速访问,动态与静态资源互不影响,即使动态服务不可用,静态资源也能照常访问。


nginx动静分离实战

动静分离示意图

准备

我将用三个端口(80,8001,8002)代表负载均衡,静态资源,动态资源。当然你也可以使用其他服务器来提供静态和动态服务。

nginx动静分离实战

我是在centos7上测试,默认开启了firewall防火墙,所以要将两个端口打开。

nginx动静分离实战

静态资源server配置

将所有图片相关的请求转至8001端口,并将目录设为"/mnt/static/image“。

nginx动静分离实战

我在上述目录中从”http://nginx.org/nginx.png“下载了这张图片做测试。

nginx动静分离实战

<code># wget http://nginx.org/nginx.png/<code>

当请求"http://localhost:8001/nginx.png"时,能看到图片则配置成功。

nginx动静分离实战

动态资源server配置

以php5.4为例,下载并安装php-fpm来配置动态网页解析。在centos7中可以直接用yum下载安装。

<code>#  yum install php
# yum instal php-fpm
# systemctl start php-fpm/<code>

nginx配置如下(默认nginx会有如下配置,只需将前面井号删除即可,并修改标红处):

nginx动静分离实战

在目录html新建一个test.php文件

<code>echo "dynamic Web page";/<code>

请求"http://localhost:8002"时,出现如下页面,则配置成功。


nginx动静分离实战

负载配置

主要使用了”upstream“和"proxy_pass"这两个指令。

nginx动静分离实战

如果配置完成重启nginx报"proxy_params not found"的错误 ,可以在同目录下新建此文件,内容如下:

<code>proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;/<code>

当我们请求”http://localhost/nginx.png“和”http://localhost/test.php“能出现与带端口号访问一致的结果时,则表明配置成功。

最终测试

我在目录”/mnt/www“中新建了一个index.html,内容如下:


nginx动静分离实战

当访问”http://localhost“时,会出现如下结果,动静态页面均能正确访问。


nginx动静分离实战

当我将8002端口所对应的server关闭或其他影响不能正常访问动态php时,下面的动态页不显示,不影响静态资源的加载。这也是动静分离的好处之一,可以提高访问性能和可维护性,以及提高用户体验度。



分享到:


相關文章: