Nginx动静分离详解

Nginx动静分离基本概述

动静分离,通过中间件将动态请求和静态请求进行分离
那为什么要通过中间件将动态请求和静态请求进行分离?减少不必要的请求消耗,同时能减少请求的延时。

在这里插入图片描述

Nginx动静分离场景实践

实验架构

在这里插入图片描述

实验环境

主机			 服务 					服务							地址
lb01		负载均衡				Nginx Proxy					192.168.15.5			
Web01		静态资源				Nginx Static				192.168.15.7
Web02		动态资源				Tomcat Server				192.168.15.8

静态资源配置

- web01服务器
1. 修改nginx配置文件
vim /etc/nginx/conf.d/ds_oldboy.conf
server {
        listen 80;
        server_name ds.oldboy.com;
        root /soft/code;
        index index.html;

        location ~* .*\.(png|jpg|gif)$ {			# 不区分大小写匹配~*,匹配优先级高于/
                root /soft/code/images;
        }
}

2. 创建nginx配置文件指定存放数据的目录
mkdir -p /soft/code/images

3. 创建nginx静态资源数据
echo "ceshi" > /soft/code/index.html
cd /soft/code/images
rz -E test.jpg

4. 重启nginx服务
systemctl restart nginx

- 测试
在本机添加域名解析
C:\Windows\System32\drivers\etc
在hosts文件添加域名解析
192.168.15.7			ds.oldboy.com	

我们打开浏览器输入ds.oldboy.com,可以访问到ceshi。
输入ds.oldboy.com\test.jpg,可以访问到我们存放在/soft/code/images路径下的图片。

动态资源配置

- web02服务器
1. 下载并安装tomcat软件
yum -y install tomcat

2. 创建tomcat软件指定的目录
mkdir /usr/share/tomcat/webapps/ROOT

3. 利用tomcat软件,创建nginx动态文件
vim /usr/share/tomcat/webapps/ROOT/java_test.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<HTML>
    <HEAD>
        <TITLE>JSP Test Page</TITLE>
    </HEAD>
    <BODY>
      <%
        Random rand = new Random();
        out.println("<h1>Random number:</h1>");
        out.println(rand.nextInt(99)+100);
      %>
    </BODY>
</HTML>

4. 重启tomcat服务
systemctl restart tomcat

5. 查看tomcat默认监听的端口号
netstat -lntp
# tcp6       0      0 :::8080                 :::*                    LISTEN      2792/java  

- 测试
我们打开浏览器,输入192.168.15.8:8080/java_test.jsp,可以正常访问到Random number:153(随机数)

负载均衡配置

- lb01服务器
1. 修改nginx配置文件
vim /etc/nginx/conf.d/proxy_ds.conf
upstream static {
        server 172.16.1.7:80;
}

upstream java {
        server 172.16.1.8:8080;
}

server {
        listen 80;
        server_name ds.oldboy.com;

        location ~* .*\.(png|gif|jpg)$ {
                proxy_pass http://static;
                proxy_set_header Host $http_host;
        }

        location ~ \.jsp {
                proxy_pass http://java;
        }
}

2. 重启nginx服务
nginx -t
systemctl restart nginx

- 测试
在本机添加域名解析
C:\Windows\System32\drivers\etc
在hosts文件添加域名解析(注释掉本机其他ip与域名之间的对应关系)
192.168.15.5			ds.oldboy.com

- 我们打开浏览器输入ds.oldboy.com/test.jpg,可以访问到我们在web01主机上传的图片,
- 输入ds.oldboy.com/java_test.jsp,可以访问到我们在web02主机的动态资源  Random number:142(随机数)

整合Nginx负载均衡代码

- lb01服务器
1. 修改nginx配置文件
vim /etc/nginx/conf.d/proxy_ds.conf
upstream static {
        server 172.16.1.7:80;
}

upstream java {
        server 172.16.1.8:8080;
}

server {
        listen 80;
        server_name ds.oldboy.com;
        root /soft/code;
        index index.html;

        location ~* .*\.(png|gif|jpg)$ {
                proxy_pass http://static;
                proxy_set_header Host $http_host;
                # 代理服务器匹配请求静态资源的时候,默认加上Host头信息(域名)
        }

        location ~ \.jsp {
                proxy_pass http://java;
        }
}

2. 创建nginx文件指定存放静态文件的目录
mkdir -p /soft/code

3. 创建nginx静态数据资源
vim /soft/code/index.html
<html lang="en">
<head>
        <meta charset="UTF-8" />
        <title>测试动静分离</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://ds.oldboy.com/java_test.jsp",
        success: function(data) {
                $("#get_data").html(data)
        },
        error: function() {
                alert("fail!!,请刷新再试");
        }
        });
});
</script>
        <body>
                <h1>测试动静分离</h1>
                <h1>上面为静态图片,下面为动态页面</h1>
                <img src="http://ds.oldboy.com/test.jpg">
                <div id="get_data"></div>
        </body>
</html>

4. 重启nginx服务
systemctl restart nginx

- 测试
我们打开浏览器,输入ds.oldboy.com,可以同时访问到我们在web01主机上传的图片 + web02主机的动态资源Random number:133(随机数)。
我们在web01主机执行systemctl stop nginx。刷新浏览器,不影响web02主机的动态资源访问。

Nginx资源分离场景实践

Nginx通过负载均衡实现手机与PC调度至不同的后端节点应用案例

实验环境

- 根据iphone、安卓、pc跳转不同的页面环境规划
主机				 服务 			   		外网ip				内网ip			端口
lb01			负载均衡				192.168.15.5		172.16.1.5			80
Web01			提供Android页面							172.16.1.7			9090
Web01			提供iphone页面							172.16.1.7			9091
web01			提供pc页面								172.16.1.7			9092

配置后端web01节点的Nginx配置

1. 修改Nginx配置文件
vim /etc/nginx/conf.d/sj.conf
server {
        listen 9090;
        location / {
                root /code/android;
                index index.html;
        }
}

server {
        listen 9091;
        location / {
                root /code/iphone;
                index index.html;
        }
}

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


2. 创建Nginx文件指定目录下的静态资源文件
mkdir /code/{android,pc,iphone}
echo "android" > /code/android/index.html
echo "pc" > /code/pc/index.html
echo "iphone" > /code/iphone/index.html

3. 启动Nginx服务
nginx -t
systemctl restart nginx

配置lb01节点的负载均衡

1. 修改Nginx配置文件
vim /etc/nginx/conf.d/proxy_sj.conf
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.nana.com;

        location / {
        	# 内置变量:$http_user_agent 来区分(电脑pc、手机 mobile、平板 pad)端的内容访问...
                if ($http_user_agent ~* "android") {
                        proxy_pass http://android;
                }

                if ($http_user_agent ~* "iphone") {
                        proxy_pass http://iphone;
                }

                if ($http_user_agent ~* "MSIE") {
                # 如果访问的浏览器是IE浏览器,返回403
                        return 403;
                }

                proxy_pass http://pc;
                # 默认跳转至pc站点
        }
}

2. 重启Nginx服务
nginx -t
systemctl restart nginx


- 测试
在本机添加域名解析
C:\Windows\System32\drivers\etc
在hosts文件添加域名解析(注释掉本机其他ip与域名之间的对应关系)
192.168.15.5		sj.nana.com

测试

  • 打开百度的官网,输入F12。可以利用百度开发工具去访问我们的域名sj.nana.com,如下图所示:
    在这里插入图片描述

京东跳转测试

我们基于上一个手机与PC调度测试,利用京东的站点跳转做一个测试

- lb01服务器
1. 修改Nginx配置文件
vim /etc/nginx/conf.d/proxy_sj.conf 
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.nana.com;

        location / {
                if ($http_user_agent ~* "android|iphone") {
                        rewrite ^/$ https://www.jd.com redirect;
                        # 京东做的站点跳转
                }
        }
}

#       location / {
#               if ($http_user_agent ~* "android") {
#                       proxy_pass http://android;
#               }

#               if ($http_user_agent ~* "iphone") {
#                        proxy_pass http://iphone;
#                }

#                if ($http_user_agent ~* "MSIE") {
#                       return 403;
#               }
#}

2. 重启Nginx服务
nginx -t
systemctl restart nginx

测试

  • 打开百度的官网,输入F12。可以利用百度开发工具去访问我们的域名sj.nana.com,如下图所示
    在这里插入图片描述
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
nginx中进行动静分离配置的详解如下: 首先,在html/index.html文件中,可以通过添加一个图片来标注backend的IP地址。例如,可以使用以下代码添加一个图片: ``` <img src="/my.gif" height="100" width="100"/> <p>Thank you for using <em>nginx 172.16.225.110.</em></p> ``` 这样,当访问该页面时,会显示这个图片和相应的文字信息。\[1\] 接下来,在nginx的配置中,可以创建一个专门用来配置静态资源路径的主机。这样做的好处是,当需要更改静态资源的目录时,只需修改主机路径即可,而不需要在多个地方进行修改。可以使用以下配置将图片的路径修改为静态资源路径: ``` location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|ico|svg)$ { proxy_pass http://localhost:81; } ``` 这样,当访问以.gif、.jpg、.jpeg、.png、.bmp、.swf、.ico或.svg结尾的URL时,nginx会将请求转发到本地的81端口,实现静态资源的访问。\[2\] 总结来说,nginx作为一种轻量级、高性能、多进程的Web服务器,非常适合作为静态资源的服务器使用。通过动静分离的配置,可以将静态资源的访问交给nginx处理,而动态的访问操作可以使用其他稳定的服务器来实现,例如Apache、Tomcat或IIS。\[3\] #### 引用[.reference_title] - *1* [Nginx 动静分离相关配置解析](https://blog.csdn.net/qq_34285557/article/details/128259079)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [nginx实现动静分离--附nginx配置文件详解](https://blog.csdn.net/weixin_30337157/article/details/97202469)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Nginx 动静分离配置详解](https://blog.csdn.net/qq_45859670/article/details/123166567)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值