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

–>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/

Nginx的动静分离实验-LMLPHP

  • 到这里为止,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/
    • 看到以下界面代表成功;

Nginx的动静分离实验-LMLPHP

–>接下来就部署第二台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/

Nginx的动静分离实验-LMLPHP

  • 到这里为止,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

Nginx的动静分离实验-LMLPHP

  • 配置负载均衡
    • 这里就可以使用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/
      Nginx的动静分离实验-LMLPHP
  • 然后在尝试访问以.jsp结尾的资源

    • http://192.168.75.130/index.jsp
04-04 00:42