nginx反向代理实现资源的动静分离

实验拓扑图:

一个网站的资源通常分为动态资源以及静态资源两种,这次我们来配置一下反向代理服务器实现资源的动静分离。
将反向代理服务器配置成一个LNMP平台,让它即充当web网站的动态资源服务器又充当反向代理服务器,所有的动态请求都让代理服务器自身来处理,同时将处理请求缓存下来。后端的upstream server配置成负载均衡的web静态资源服务器同时实现基于cookie的客户端session绑定。

首先准备基础环境

反向代理服务器端配置:
yum install -y nginx    //安装nginx服务
systemctl start nginx
systemctl enable nginx //设置开机自动启动nginx服务
vim /etc/selinux/config
SELINUX=disabled    //关闭selinux功能
systemctl stop firewalld   //关闭防火墙
打开反向代理服务器的路由转发功能
编辑/etc/sysctl.conf文件
添加net.ipv4.ip_forward=1
sysctl -p重读文件
后端upstream server服务器配置:
yum install -y httpd  //两台服务器安装httpd服务
vim /etc/selinux/config
SELINUX=disabled    //关闭selinux功能
systemctl stop firewalld   //关闭防火墙

接下来配置LNMP平台,因为php与nginx只能使用fastcgi协议,所以这里只能使用fastcgi_pass模块与nginx对接。

yum install -y php-fpm  //安装php模块
systemctl restart php-fpm   //启动服务
systemctl enable php-fpm  //设置开机自动启动
配置反向代理功能
location ~ \.php$ {
                root  /usr/share/nginx/html;   //定义php程序文件的主目录,所有php资源的请求都会从主目录开始查找
                fastcgi_pass 127.0.0.1:9000;  //指名运行php-fpm程序的服务器是哪一台,因为这里是与代理服务器配置在同一台主机上面所以此时使用本地回环地址。如果php-fpm程序使用的是单独的服务器则需要更改对应的IP地址。
                fastcgi_index  index.php;   //定义访问的主页
                fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_nam;   //调用fastcgi_param配置文件中定义的配置参数
                include fastcgi_params;  //使用fastcgi_params配置文件
        }

重新启动服务器并准备一个测试页面
systemc restart nginx
cd /usr/share/nginx/html
将原来的index.html重命名然后重新创建一个index.php的测试页面
<?php
    phpinfo();
?>
安装mariadb数据库并测试其连接性
安装php-mysql 以及maraidb-server
编辑/usr/share/nginx/html/index.php
<?php
                $conn = mysql_connect(‘127.0.0.1‘,‘root‘,‘‘);
                if ($conn)
                      echo succ;
                else
                        echo fail;
                mysql_close();
?>



此时我们已经实现了动静分离,php资源的请求被发送到php-fpm服务器,静态资源请求被发往upstream服务器,因为php-fpm跟ngxin安装在同一台服务器上,所以php资源调度请求都被发往负载均衡调度器,如果php-fpm部署在单独的服务器,那么php资源的请求将被发送到单独部署的php服务器上。

配置动态资源的缓存

需要用到fastcgi_cache缓存模块,配置格式同样是定义在http字段中

fastcgi_cache_path  /cache/fastcgi  levels=1:1 keys_zone=fcgicache:10m  inactive=3m max_size=1g;
在location中调用缓存功能
location ~ \.php$ {
                root  /usr/share/nginx/html;
                fastcgi_pass 127.0.0.1:9000;
                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_nam;
                include fastcgi_params;
                fastcgi_cache fcgicache;
                fastcgi_cache_vaild 200 301 302 10m;
                fastcgi_cache_valid any 1m;
                fastcgi_cache_use_stale error timeout 404;
        }
保存重启服务
创建目录
mkdir /cache/fastcgi
更改文件属主属组
chown -R nginx:nginx /cache/fastcgi

进行压力测试:

ab -n 1000 -c 100 http://172.161.1.132/index.php
当逐步提高并发量之后我们可以发现,开启缓存功能跟不开启缓存功能,请求响应的时间有明显的差别。
为了验证客户端获取的资源是从nginx反向代理服务器上获取的,还可以在nginx配置文件中的server字段中定义两个参数

add_header X-via $server_addr; 哪台主机帮忙代理
add_header X-Cache $upstream_cache_status;返回的资源是否为缓存资源

然后使用客户端向服务器请求资源同时打开浏览器的调试台查看

可以看到我们获取的资源确实为反向代理服务器的缓存提供的

接下配置两台静态服务器并实现基于客户端cookie的session绑定

为了验证效果这次两台静态服务器同样使用不同的测试页面
首先在主配置文件的http字段定义upstream负载均衡

upstream upservers {
            server 192.168.153.130 ;
            server 192.168.153.131 ;
            }
在location中进行调度
location /forum    {                    //这里我们使用url重定向来定义
            proxy_pass http://upservers/;
         }

使用客户端发送请求验证


当我们每刷新一次,反向代理服务器就会根据算法调度将请求转发到后端的upstream server服务武器上实现负载均衡。

配置基于cookie的session的会话绑定

因为nginx-sticky-module为第三方模块所以需要将此功能编译进nginx程序

首先安装openssl-devel
yum install -y openssl-devel
解压sticky安装包
tar -zxvf nginx-goodies-nginx-sticky-module-ng-1e96371de59f.tar.gz
重命名目录
mv nginx-goodies-nginx-sticky-module-ng-1e96371de59f nginx-sticky
cd nginx-sticky
./configure --prefix=/etc/jack/nginx  --add-module=/etc/tools/nginx-sticky/
make编译,然后将原来的/nginx/sbin目录下的nginx程序替换掉
mv /etc/nginx/sbin/nginx    /etc//nginx/sbin/nginx.bak  #备份
cp /etc/tools/objs/nginx    /etc/nginx/sbin/
重新启动服务
在location中定义会话保持参数
location /forum    {
                        sticky;   //根据具体需求还可以设置expires,domain等信息
            proxy_pass http://upservers/;
         }

配置完成后我们在使用客户端访问的时候发现请求一直被调度到第一次访问的服务器。这样就实现了基于cookie的session会话绑定。

原文地址:http://blog.51cto.com/11970509/2342236

时间: 2024-10-20 16:44:30

nginx反向代理实现资源的动静分离的相关文章

项目实战2.2—nginx 反向代理负载均衡、动静分离和缓存的实现

实验一:实现反向代理负载均衡且动静分离 1.环境准备: 机器名称 IP配置 服务角色 备注 nginx VIP:172.17.11.11 反向代理服务器 开启代理功能 设置监控,调度 rs01 RIP:172.17.22.22 后端服务器 stasic-srv 组 rs02 RIP:172.17.1.7 后端服务器 stasic-srv 组 rs01 RIP:172.17.77.77 后端服务器 defautl-srv 组 rs02 RIP:172.17.252.111 后端服务器 defaut

项目实战02:nginx 反向代理负载均衡、动静分离和缓存的实现

目录 实验一:实现反向代理负载均衡且动静分离 1.环境准备: 2.下载编译安装tengine 3.设置代理服务器的配置文件 4.启动tengine服务 5.开启后端的web服务 6.测试 实验二:nginx实现缓存功能 1.环境准备:同上实验,实验结构图如下: 2.设置代理服务器的配置文件 3.测试:访问 http://172.17.11.11/ 总项目流程图,详见http://www.cnblogs.com/along21/p/7435612.html 回到顶部 实验一:实现反向代理负载均衡且

nginx反向代理tomacat+keepalived实现动静分离、负载均衡、高可用

本文的动静分离主要是通过nginx+tomcat来实现,其中nginx处理图片.html.JS.CSS等静态文件,tomcat处理jsp.servlet等动态请求 服务器名称                                 系统版本                           预装软件                     IP地址 Nginx服务器                             CentOS 7 最小安装              Nginx

Nginx反向代理(基于目录动静分离、不同浏览器类型不同代理、基于扩展名的不同代理)

proxy_pass http_proxy_module proxy_pass指令输入ngx_http_proxy_module模块,此模块可以将请求转发到另外一台服务器 官网:http://nginx.org/en/docs/http/ngx_http_proxy_module.html =============================================== location /some/path/ { proxy_pass http://127.0.0.1; } ==

nginx反向代理,动静态请求分离,以及nginx缓存应用,以及使用ngx_cache_purge清除指定URL

一,nginx反向代理配置 #tomcat Java代码   upstream tomcat_server{ server 127.0.0.1:8080; } erver{ listen 80; server_name www.wolfdream.com; location / { proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X

nginx反向代理,实现动静分离

nginx反向代理,实现动静分离 nginx反向代理 反向代理(Reverse Proxy)方式是指以代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络上的服务器:并将从服务器上得到的结果返回给Internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器. 当客户机向站点提出请求时,请求将转到代理服务器.然后,代理服务器通过防火墙中的特定通路,将客户机的请求发送到内容服务器.内容服务器再通过该通道将结果回传给代理服务器.代理服务器将检索到的信息发送给客户机. 实验

Nginx反向代理、动静分离、负载均衡及rewrite隐藏路径详解(Nginx Apache MySQL Redis)–第三部分

Nginx反向代理.动静分离.负载均衡及rewrite隐藏路径详解 (Nginx Apache MySQL Redis) 楓城浪子原创,转载请标明出处! 更多技术博文请见个人博客:https://fengchenglangzi.000webhostapp.com 微信bh19890922 QQ445718526.490425557 三.Nginx动静分离及负载均衡 3.1 Nginx安装 请参考:https://fengchenglangzi.000webhostapp.com/?p=511 亦

ubuntu 16.04利用docker搭建java+tomcat+nginx反向代理/动静分离

ubuntu 16.04利用docker搭建java+tomcat+nginx反向代理 新建两个docker容器 docker run -it --name Tomcat-mysql -v /mnt:/mnt -p 8866:80 -p 33006:3306 ubuntu /bin/bash docker run -itd --name webserver -p 8888:80 -v /mnt/:/mnt/ ubuntu /bin/bash [email protected]:~# docker

centos6.5搭建nginx反向代理Apache服务并实现动静分离

Nginx反向代理配置步骤: 一.规划网络拓扑 二.配置Apache服务器 三.配置nginx服务器 四.进行测试   一.规划网络拓扑 二.配置Apache服务器 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 安装Apache服务 [[email protected] ~]# yum -y install httpd php 注:由于我们的Apache服务器要负责动态页面的处理,所以要安装PHP.   编辑A