通过负载均衡中间件,将动态请求和静态请求进行分离。这样做的好处是,加速访问,动态与静态资源互不影响,即使动态服务不可用,静态资源也能照常访问。
准备
我将用三个端口(80,8001,8002)代表负载均衡,静态资源,动态资源。当然你也可以使用其他服务器来提供静态和动态服务。
我是在centos7上测试,默认开启了firewall防火墙,所以要将两个端口打开。
静态资源server配置
将所有图片相关的请求转至8001端口,并将目录设为"/mnt/static/image“。
我在上述目录中从”http://nginx.org/nginx.png“下载了这张图片做测试。
# wget http://nginx.org/nginx.png
当请求"http://localhost:8001/nginx.png"时,能看到图片则配置成功。
动态资源server配置
以php5.4为例,下载并安装php-fpm来配置动态网页解析。在centos7中可以直接用yum下载安装。
# yum install php# yum instal php-fpm# systemctl start php-fpm
nginx配置如下(默认nginx会有如下配置,只需将前面井号删除即可,并修改标红处):
在目录html新建一个test.php文件
<?phpecho "dynamic Web page";
请求"http://localhost:8002"时,出现如下页面,则配置成功。
负载配置
主要使用了”upstream“和"proxy_pass"这两个指令。
如果配置完成重启nginx报"proxy_params not found"的错误 ,可以在同目录下新建此文件,内容如下:
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;
当我们请求”http://localhost/nginx.png“和”http://localhost/test.php“能出现与带端口号访问一致的结果时,则表明配置成功。
最终测试
我在目录”/mnt/www“中新建了一个index.html,内容如下:
当访问”http://localhost“时,会出现如下结果,动静态页面均能正确访问。
当我将8002端口所对应的server关闭或其他影响不能正常访问动态php时,下面的动态页不显示,不影响静态资源的加载。这也是动静分离的好处之一,可以提高访问性能和可维护性,以及提高用户体验度。