Nginx动静分离



nginx 动静分离


不需要运维来做,开发做的。

  • 动态请求:该请求会调用数据库中的数据。

  • 静态请求:用户请求不会调用数据库。

  • 动态页面:后端开发写的需要调用数据库的页面(python、java、C、php)

  • 静态页面:前端开发写的不需要调用数据库。

单台服务器动静分离

多台服务器动静分离

环境准备

主机名 WanIP LanIP 角色
web01 172.16.1.7 静态资源
web02 172.16.1.8 动态资源tomcat
lb01 10.0.0.5 172.16.1.5 负载均衡

web01配置静态资源

# 1、配置静态资源服务
[root@web01 /etc/nginx/conf.d]# vi static.conf
server {
        listen 80;
        server_name dj.gong.com;
        # 可以注释掉
        root /website/dj;
        index index.html;

		# 匹配到图片格式结尾的内容走下面的路径
        location ~* \.(jpg|gif|jpeg|png|mp4)$ {
                root /website/dj/images;
        }
}

# 2、创建访问目录并上传文件
[root@web01 /website]# mkdir dj/images

# 3、测试访问

web02配置动态资源

# 1、安装tomcat
[root@web02 ~]# yum -y install tomcat

# 2、创建tomcat主目录
[root@web02 ~]# cd /usr/share/tomcat/webapps/
[root@web02 /usr/share/tomcat/webapps]# mkdir ROOT

# 3、动态资源
[root@web02 /usr/share/tomcat/webapps/ROOT]# \vi java.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<HTML>
    <HEAD>
        <TITLE>JSP Page</TITLE>
    </HEAD>
    <BODY>
        <%
            Random rand = new Random();
            out.println("<h1>随机数:<h1>");
            out.println(rand.nextInt(99)+100);
        %>
    </BODY>
</HTML>

# 6、启动并开机自启
[root@web02 ~]# systemctl start tomcat
[root@web02 ~]# systemctl enable tomcat

负载均衡配置

# 1、编辑负载均衡的配置文件
[root@lb01 /app/nginx/conf/conf.d]# vi upstream.conf
server {
        listen 80;
        server_name dj.gong.com;

        location / {
                root /website/dj;
                index index.html;
        }
	
		# 单台服务器可以这样写,多台服务器可以卸载upstream模块里面
        location ~* \.(jpg|png|gif)$ {
                proxy_pass http://10.0.0.7;
                proxy_set_header Host $http_host;
                # 开启压缩,传输效率更高
                gzip on;
        }

        location ~ \.jsp$ {
        		# proxy_pass可以直接代理tomcat
                proxy_pass http://10.0.0.8:8080;
                proxy_set_header Host $http_host;
        }
}

# 2、编辑站点目录的页面
[root@lb01 ~]# vi /website/dj/index.html
<html lang="en">
<head>
        <meta charset="UTF-8" />
        <title>测试ajax和跨域访问</title>
        <script src="http://libs.baidu.com/jquery/2.1.4/jquery.min.js"></script>
</head>
<script type="text/javascript">
$(document).ready(function(){
        $.ajax({
        type: "GET",
        url: "http://dj.gong.com/java.jsp",
        success: function(data){
                $("#get_data").html(data)
        },
        error: function() {
                alert("哎呦喂,失败了,回去检查你服务去~");
        }
        });
});
</script>
        <body>
                <h1>带你测试动静分离</h1>
                <img src="http://dj.gong.com/AM.jpg">
                <div id="get_data"></div>
        </body>
</html>

资源分离

环境准备

主机名 WanIP LanIP 角色 端口
web01 172.16.1.7 提供android页面 9090
web01 172.16.1.7 提供ios页面 9091
web01 172.16.1.7 提供pc页面 9092
lb01 10.0.0.5 172.16.1.5 负载均衡 80

配置资源分离

# 1、配置资源分离,通过端口好区分
[root@web01 /etc/nginx/conf.d]# vi resource_rep.conf
server {
        listen 9090;
        root /website/android;
        index index.html;
}

server {
        listen 9091;
        root /website/ios;
        index index.html;
}

server {
        listen 9092;
        root /website/pc;
        index index.html;
}

# 2、创建站点目录
[root@web01 /website]# mkdir {pc,android,ios}

# 3、创建主页
[root@web01 /website]# echo "<h1>this is pc</h1>" > pc/index.html
[root@web01 /website]# echo "<h1>this is android</h1>" > android/index.html
[root@web01 /website]# echo "<h1>this is ios</h1>" > ios/index.html

配置负载均衡

# 1、创建负载均衡的配置文件
[root@lb01 ~]# vi /app/nginx/conf/conf.d/resource_rep.conf
server {
        listen 80;
        server_name resource_rep.gong.com;

        location / {
        		# 通过判断语句来判断客户端是哪种终端,来连接哪台主机。
                if ($http_user_agent ~* "Android") {
                        proxy_pass http://10.0.0.7:9090;
                }

                if ($http_user_agent ~* "Iphone") {
                        proxy_pass http://10.0.0.7:9091;
                }
				
				# 默认使用pc,当后端机器有多台的时候可以写在upstream模块中。
                proxy_pass http://10.0.0.7:9092;
        }
}


# ----------第二种写法------------
upstream android {
        server 172.16.1.7:9090;
}

upstream iphone {
        server 172.16.1.7:9091;
}

upstream pc {
        server 172.16.1.7:9092;
}

server {
        listen 80;
        server_name sj.drz.com;
        charset 'utf-8';

        location / {

                #如果客户端来源是Android则跳转到Android的资源;
                if ($http_user_agent ~* "Android") {
                        proxy_pass http://android;
                }

                #如果客户端来源是Iphone则跳转到Iphone的资源;
                if ($http_user_agent ~* "Iphone") {
                        proxy_pass http://iphone;
                }

                #如果客户端是IE浏览器则返回403错误;
                if ($http_user_agent ~* "MSIE|Trident") {
                        return 403;
                }

                #默认跳转pc资源;
                proxy_pass http://pc;
        }
}

需要有特定的IE浏览器的标识才能够判断。



FBI WARNING
QQ:1402122292 认准原创sheldon 别人叫我晓东
posted @ 2020-07-17 21:01  Gshelldon  阅读(144)  评论(0编辑  收藏  举报