Nginx的动静分离实验
1、如何区分静态文件和动态文件?
- location中:
- expires 60d:静态资源–>可以缓存,不会向服务器去请求;
- proxy_pass:把请求转发给某个组
- fastcgi_pass:处理fastcgi协议来解析的;
- php运行可以借助php-fpm组件来运行的;
Nginx的动静分离架构:简单理解就是:
- 静态页面的请求,可以交给nginx处理
- 如果是动态的清洁球,就可以交给TomCAT/Resin、PHP/ASP来处理
Nginx是可以直接把动态和静态的文件混合发布,并且由Nginx来主宰;
2、大体上的理解:
动静分离指的是将动态请求和静态请求分隔开,然后分别路由到相应的后端服务器
- 客户请求的资源,如果是一些动态的数据,就交给后端PHP服务器来处理
- 客户请求的资源,如果是一些静态的数,那么就交给另外一台服务器处理
- nginx就是根据配置,对不同的请求做出不同的转发,从而提高整个服务器系统的性能;
3、实验规划:
- 使用到3台服务器:
- nginx-server服务器:处理静态资源,并且实现均衡负载
- 192.168.75.130
- 另外两台后端服务器:用处理动态资源
- 安装ToCAT服务
- 192.168.75.131–>TomCAT-1
- 192.168.75.132->TomCAT-2
- nginx-server服务器:处理静态资源,并且实现均衡负载
–>Ngin-xserver静态资源服务器配置如下:
- 安装好nginx;
- 提供一个静态的.png资源
#源码编译nginx-->准备好nginx的源码包
[root@node0 ~]# cd /usr/local/src/
[root@node0 src]# ls
nginx-1.16.1.tar.gz
#安装必要的依赖
[root@node0 src]# yum -y install gcc gcc-c++ zlib zlib-devel pcre pcre-devel openssl openssl-devel
#解压-->预编译-->编译-->安装
#解压
[root@node0 src]# tar -xf nginx-1.16.1.tar.gz
[root@node0 src]# cd nginx-1.16.1/
#预编译
[root@node0 nginx-1.16.1]# ./configure --prefix=/usr/local/nginx --with-http_stub_status_module
#编译、安装
[root@node0 nginx-1.16.1]# make && make install
#如果喜欢的话就做一个启动脚本
[root@node0 nginx-1.16.1]# vim /usr/lib/systemd/system/nginx.service
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile =/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecrReload=/bin/kill -s HUP $MAINPID
ExecrStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
#给脚本赋予权限
[root@node0 nginx-1.16.1]# chmod 777 /usr/lib/systemd/system/nginx.service
#然后加入systemd管理
[root@node0 nginx-1.16.1]# systemctl daemon-reload
[root@node0 nginx-1.16.1]# systemctl start nginx.service && systemctl enable nginx.service
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.
#最后验证一下nginx启动了没有
[root@Test0 nginx-1.16.1]# ps -ef | grep nginx
root 11721 1 0 23:14 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
............
#用另外一台服务器来验证nginx安装是否有问题,-->显示ok就没问题了
[root@Node1 ~]# curl -I 192.168.75.130
HTTP/1.1 200 OK
..........
- 上面只能说明nginx是已经安装好了,还没有配置;
- 等两台TomCACT服务器都部署好了,就可以进行配置
–>TomCAT-1服务器配置如下:
- 安装TomCAT服务
- 首先准备JDK,配置基础环境
#准备源码包
[root@Node1 src]# ls
apache-tomcat-9.0.7.tar.gz jdk1.8.0_131.tar.gz
#解压jkd的包
[root@Node1 src]# tar -xf jdk1.8.0_131.tar.gz
#并且改革名字-->方便好敲点
[root@Node1 src]# mv jdk1.8.0_131 jdk
#配置jdk的路径脚本-->因为profile里面需要用到
[root@Node1 src]# vim /etc/profile.d/java.sh
export JAVA_HOME=/usr/local/src/jdk
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
export PATH=$JAVA_HOME/bin:$PATH
#刷新一下环境变量
[root@Node1 src]# source /etc/profile.d/java.sh
#检查一下java能否使用
[root@Node1 src]# java -version
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
#到这里java环境部署完成
- 接下来部署tomcat服务
- 解压包,并且移动到指定目录
- 部署好命令
- 启动tomcat验证
#解压包
[root@Node1 src]# ls apache-tomcat-9.0.7.tar.gz
apache-tomcat-9.0.7.tar.gz
[root@Node1 src]# tar -xf apache-tomcat-9.0.7.tar.gz
#然后把tomcat的解压包移动到/usr/local/并且改名为tomcat
[root@Node1 src]# mv apache-tomcat-9.0.7 /usr/local/tomcat
#做好命令快捷键-->简化操作
[root@Node1 ~]# ln -s /usr/local/tomcat/bin/* /usr/local/bin/
#直接启动tomcat
[root@Node1 ~]# startup.sh
.......#看到下面的信息代表启动成功
Tomcat started.
.......
#然后验证一下:
#首先查看进程-->8080端口是否启动
[root@Node1 ~]# ps -ef |grep :8080
root 7478 7151 0 17:16 pts/0 00:00:00 grep --color=auto :8080
- 浏览器直接访问–>看到页面代表部署成功
- http://192.168.75.131:8080/
- 到这里为止,Tomcat-1的服务器已经搭建好了
- 接下来就要配置一下资源–>用于动静分离
#创建一个资源存放的路径
[root@Node1 ~]# mkdir -p /usr/local/tomcat/webapps/aa
#编写资源的代码-->简单理解就是创建一个动态的页面
[root@Node1 ~]# vim /usr/local/tomcat/webapps/aa/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP liangjiawei-01 page </title>
</head>
<body>
<% out.println("动态页面-1,http://www.liangjiawei.com");%>
</body>
</html>
#创建好资源之后,也得修改配置文件
[root@Node1 ~]# cp -a /usr/local/tomcat/conf/server.xml{,.bak}
..............
#多添加一台虚拟主机
164 <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNam
espaceAware="false">
165 <Context docBase="/usr/local/tomcat/webapps/aa" path="" reloadable="true" />
166 </Host>
#然后重启服务
[root@Node1 ~]# shutdown.sh
[root@Node1 ~]# startup.sh
#被忘了验证一下配置
- 浏览器直接访问
- http://192.168.75.131:8080/aa/
- 看到以下界面代表成功;
–>接下来就部署第二台Tomcat-2
-
步骤和第一台一模一样
-
安装TomCAT服务
- 首先准备JDK,配置基础环境
#准备源码包
[root@Node2 src]# ls
apache-tomcat-9.0.7.tar.gz jdk1.8.0_131.tar.gz
#解压jkd的包
[root@Node2 src]# tar -xf jdk1.8.0_131.tar.gz
#并且改革名字-->方便好敲点
[root@Node2 src]# mv jdk1.8.0_131 jdk
#配置jdk的路径脚本-->因为profile里面需要用到
[root@Node2 src]# vim /etc/profile.d/java.sh
export JAVA_HOME=/usr/local/src/jdk
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
export PATH=$JAVA_HOME/bin:$PATH
~
#刷新一下环境变量
[root@Node2 src]# source /etc/profile.d/java.sh
#检查一下java能否使用
[root@Node2 src]# java -version
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
#到这里java环境部署完成
- 接下来部署tomcat服务
- 解压包,并且移动到指定目录
- 部署好命令
- 启动tomcat验证
#解压包
[root@Node2 src]# ls apache-tomcat-9.0.7.tar.gz
apache-tomcat-9.0.7.tar.gz
[root@Node2 src]# tar -xf apache-tomcat-9.0.7.tar.gz
#然后把tomcat的解压包移动到/usr/local/并且改名为tomcat
[root@Node2 src]# mv apache-tomcat-9.0.7 /usr/local/tomcat
#做好命令快捷键-->简化操作
[root@Node2 src]# ln -s /usr/local/tomcat/bin/* /usr/local/bin/
#直接启动tomcat
[root@Node2 src]# startup.sh
.......#看到下面的信息代表启动成功
Tomcat started.
.......
#然后验证一下:
#首先查看进程-->8080端口是否启动
[root@Node2 src]# ps -ef | grep :8080
root 7325 7144 0 17:36 pts/0 00:00:00 grep --color=auto :8080
- 浏览器直接访问–>看到页面代表部署成功
- http://192.168.75.132:8080/
- 到这里为止,Tomcat-1的服务器已经搭建好了
- 接下来就要配置一下资源–>用于动静分离
#创建一个资源存放的路径
[root@Node2 src]# mkdir /usr/local/tomcat/webapps/bb/
#编写资源的代码-->简单理解就是创建一个动态的页面
[root@Node2 src]# vim /usr/local/tomcat/webapps/bb/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP LiangGaRy-02 page </title>
</head>
<body>
<% out.println("动态页面-2,http://blog.liangjiawei.net");%>
</body>
</html>
#创建好资源之后,也得修改配置文件
[root@Node2 ~]# cp -a /usr/local/tomcat/conf/server.xml{,.bak}
[root@Node2 src]# vim /usr/local/tomcat/conf/server.xml
...............
#多添加一台虚拟主机
#在大概是164行的空位添加一台主机
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
<Context docBase="/usr/local/tomcat/webapps/bb" path="" reloadable="true" />
</Host>
#然后重启服务
[root@Node2 ~]# shutdown.sh
[root@Node2 ~]# startup.sh
#被忘了验证一下配置
- 浏览器直接访问
- http://192.168.75.132:8080/bb/
- 看到以下界面代表成功;
–>回到nginx-server端配置
- 编写一个静态页面的配置
#编写一个静态的资源网页
[root@node0 nginx-1.16.1]# vim /usr/local/nginx/html/index.html
<html><body><h1>this is static</h1></body></html>
#自己尝试访问一下
[root@node0 nginx-1.16.1]# curl localhost
<html><body><h1>this is static</h1></body></html>
- 创建一个目录,用于存放png图片
- 注意自己的路径,默认路径就好了
- /usr/local/nginx/html/static
#创建一个目录
[root@node0 nginx-1.16.1]# cd /usr/local/nginx/
[root@node0 nginx]# mkdir html/static/
[root@node0 nginx]# cd html/static/
#上传一张图片
[root@node0 static]# ls
0b14de866d2e6c498769803543c384cc.jpeg
#改名仅仅为了方便而已
[root@node0 static]# mv 0b14de866d2e6c498769803543c384cc.jpeg 1.jpeg
- 修改nginx的配置文件
- 让页面能够加载图片
#修改配置文件
[root@node0 static]# cp /usr/local/nginx/conf/nginx.conf{,.bak}
..............
#在server模块中,在location /这个下面在添加一个location;
#注意,一定要在location /{}外添加如下信息
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|css)$ {
root /usr/local/nginx/html/static;
expires 10d;
}
...........
#检测一下配置文件
[root@node0 static]# ln -s /usr/local/nginx/sbin/* /usr/bin/
[root@node0 static]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
#重载配置文件验证
[root@node0 static]# nginx -s reload
- 如果看到页面就代表正常
- http://192.168.75.130/1.jpeg
- 配置负载均衡
- 这里就可以使用upstream
#修改配置文件
[root@node0 static]# vim /usr/local/nginx/conf/nginx.conf
...........
#在http模块下,server模块之上配置如下信息,大概是32行左右添加就可以了
34 upstream tomcat_group {
35 server 192.168.75.131:8080 weight=1;
36 server 192.168.75.132:8080 weight=1;
37 }
#然后还需要添加一个location的信息
#定位如果是访问动态资源就走upstream的后端tomcat服务
#选项参数说明:
#-->proxy_pass:这个是指定真实处理请求的服务器群,就是上面upstream指定的群组
#-->proxy_set_header HOST $host;:记录请求头的主机信息
#--> proxy_set_header X-Real-IP $remote_addr:记录真实的IP地址
#-->proxy_set_header X-Forwarded-For:记录转发的信息;
location ~ .*\.jsp$ {
proxy_pass http://tomcat_group;
proxy_set_header HOST $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
#检测一下配置文件-->然后重启
[root@node0 ~]# nginx -t
#重启nginx
[root@node0 ~]# nginx -s reload
验证:
-
直接浏览器访问nginx-server的ip
- http://192.168.75.130/
- http://192.168.75.130/
-
然后在尝试访问以.jsp结尾的资源
- http://192.168.75.130/index.jsp