Nginx实现动静分离

目录

静态资源

动态资源

区别和应用场景

1. 准备环境

2. 配置代理

3. 静态资源主机配置

4. 动态资源主机配置 

5. 访问静态和动态资源测试

测试1:访问静态资源

测试2:访问动态资源


 

动态资源和静态资源是在网络和Web开发中常用的两个概念,它们有以下基本定义和区别:

静态资源

静态资源是指在服务器上存储的不会随着用户请求或时间变化而改变的文件或内容。它们通常包括以下类型:

  1. 静态网页:HTML、CSS、JavaScript等文件。
  2. 图片文件:如JPEG、PNG、GIF等格式的图片。
  3. 字体文件:如TTF、OTF等格式的字体文件。
  4. 多媒体文件:如MP3、MP4等格式的音频和视频文件。
  5. 其他文件:如PDF文档、文本文件等。

静态资源的特点是不依赖于用户的请求动态生成,服务器直接将文件内容发送给客户端,通常由Web服务器(如Nginx、Apache)直接提供。

动态资源

动态资源则是指在服务器端根据用户请求或其他数据生成的内容,它们具有以下特点:

  1. 动态网页:根据用户登录状态、请求参数等动态生成内容的网页。
  2. 数据库查询结果:从数据库中获取数据并生成的内容。
  3. 实时数据:如股票价格、天气信息等实时变化的数据。

动态资源通常需要通过服务器端脚本语言(如PHP、Python、Node.js)或者专门的Web应用程序(如Django、Flask)来处理用户请求,生成内容,并将结果发送给客户端。

区别和应用场景

  • 性能和缓存:静态资源由于内容稳定性高,通常可以进行缓存,减少服务器负载和提升访问速度。动态资源则需要每次请求时动态生成,较难进行缓存,需要更多的服务器计算资源。

  • 内容更新:静态资源的更新相对简单,直接替换文件即可;动态资源可能涉及到程序代码的修改和更新。

  • 访问控制:静态资源通常通过Web服务器配置直接提供,访问较为简单;动态资源可能需要更复杂的访问控制和权限验证。

 

为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速度。降低原来单个服务器的压力。 在动静分离的tomcat的时候比较明显,因为tomcat解析静态很慢,其实这些原理的话都很好理解,简单来说,就是使用正则表达式匹配过滤,然后交个不同的服务器,动态资源交给动态服务器,静态资源交给静态服务器。

 

1. 准备环境

准备一个nginx代理 两个http 分别处理动态和静态。

localhostRoucky_linux9.4192.168.226.20
localhostRoucky_linux9.4192.168.226.21
localhostRoucky_linux9.4192.168.226.22

三台服务器都配置官方的nginx源并下载和启动

sudo tee /etc/yum.repos.d/nginx.repo << 'EOF'
[nginx-stable]
name=nginx stable repo
baseurl=https://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
 
[nginx-mainline]
name=nginx mainline repo
baseurl=https://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
EOF
yum install -y nginx
systemctl enable --now nginx

分别修改默认打开的目录 

#对192.168.226.20修改
echo "webserver1" > /usr/share/nginx/html/index.html
systemctl restart nginx


#对192.168.226.21修改
echo "webserver2" > /usr/share/nginx/html/index.html
systemctl restart nginx


#对192.168.226.22修改
echo "webserver3" > /usr/share/nginx/html/index.html
systemctl restart nginx

 此时三台服务器都可以正常开启

 

 

2. 配置代理

现在对192.168.226.20操作,配置其nginx文件

vim /etc/nginx/conf.d/default.conf


#配置nginx反向代理upstream;
upstream static {
    server 192.168.226.21:80 weight=1 max_fails=1 fail_timeout=60s;
}
upstream php {
    server 192.168.226.22:80 weight=1 max_fails=1 fail_timeout=60s;
}
server {
    listen 80;
    server_name localhost;

    # 动态资源加载
    location ~ \.(php|jsp)$ {
        proxy_pass http://php;
        proxy_set_header Host $host:$server_port;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    # 静态资源加载
    location ~ .*\.(html|gif|jpg|png|bmp|swf|css|js|txt|mp4)$ {
        proxy_pass http://static;
        proxy_set_header Host $host:$server_port;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

测试Nginx配置文件

nginx -t

重新加载Nginx配置

nginx -s reload

 

3. 静态资源主机配置

对192.168.226.21主机操作,配置其文件

vim /etc/nginx/conf.d/default.conf


#静态资源配置
server {
        listen 80;
        server_name     localhost;

        location ~ \.(html|jpg|png|js|css|gif|bmp|jpeg|txt|mp4) {
        root /home/www/nginx;
        }
}

 

 测试Nginx配置文件

nginx -t

重新加载Nginx配置

nginx -s reload

创建一个自定义发布目录

mkdir -p /home/www/nginx
cd /home/www/nginx

在这个目录里我上传一些静态资源,如图中所示,有.txt和.mp4等格式结尾的文件

 

4. 动态资源主机配置 

 

对192.168.226.22主机操作,配置其文件

vim /etc/nginx/conf.d/default.conf

#动态资源主机配置
server {
    listen 80;  # 服务器监听端口为80,这通常用于HTTP流量
    server_name localhost;  # 当前服务器块适用于名为 "localhost" 的请求
    root /home/nginx/html;  # 设置网站根目录,当请求匹配这个服务器块时,Nginx 会在这个目录中查找文件

    # 匹配所有以 .php 结尾的请求的配置块
    location ~ \.php$ {
        fastcgi_pass unix:/run/php-fpm/www.sock;  # 将请求传递给位于 /run/php-fpm/www.sock 的PHP-FPM Unix套接字进行处理
        fastcgi_index index.php;  # 定义 FastCGI 的默认文件为 index.php,类似于 Apache 的 DirectoryIndex
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;  # 设置SCRIPT_FILENAME变量为当前文档根目录和请求脚本名称的组合。PHP会使用这个变量来确定要执行的脚本
        include fastcgi_params;  # 包含 fastcgi_params 文件,该文件定义了 FastCGI 处理请求所需的其他变量
    }
}


 测试Nginx配置文件

nginx -t

重新加载Nginx配置

nginx -s reload

yum 安装php

# 安装epel-release存储库
sudo dnf -y install epel-release
# 安装Remi存储库
sudo dnf -y install https://rpms.remirepo.net/enterprise/remi-release-9.rpm -y
#启用PHP模块
sudo dnf module reset php
sudo dnf module enable php:remi-7.4
#安装PHP和相关扩展
sudo dnf -y install php php-cli php-fpm php-mysqlnd php-zip php-devel php-gd php-mcrypt php-mbstring php-curl php-xml php-pear php-bcmath php-json
#启动PHP-FPM服务
sudo systemctl start php-fpm
sudo systemctl enable php-fpm
#验证安装
php -v

修改php配置文件

vim /etc/php-fpm.d/www.conf +24

#在这附近找到并按照如下修改这两个参数

user = nginx

group = nginx

 

 创建一个自定义的发布目录

mkdir -p /home/nginx/html

 创建index.php测试文件并输入测试代码

sudo tee /home/nginx/html/index.php << 'EOF'
<?php
phpinfo();
?>
EOF

 重启php服务

systemctl restart php-fpm

 

 

5. 访问静态和动态资源测试

 

测试1:访问静态资源

浏览器输入格式: 192.168.226.20/静态资源的文件名

在上面的存放静态资源的发布目录里我传入拉一些格式的静态资源如图:

 

按照上述格式访问如下:

 

 

 

测试2:访问动态资源

浏览器输入格式: 192.168.226.20/动态资源的文件名

在配置动态主机时,创建了一个index.php代码文件,如图:

 

现在访问这个动态页面测试:

 

到此就成功验证了动静资源的分离。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/721130.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

手写精简版TinyHttpd项目(一)

前言&#xff1a; 我们在之前的TinyHttpd的精读(可以在首页去查看)中已经是基本的了解了显示一个网页的基本过程&#xff0c;那么我们学习后可以通过手写一个精简版的进行巩固下。 0.新工程的建立 我们也可以顺带复习下如何通过cmake在ubuntu下新建一个工程(记得提前下载cmake…

统计分析方法-非参数检验-python

文章目录 前言非参数检验特点常见的非参数检验一、Cliffs Delta动机定义二、Wilcoxon Signed-Rank Test定义三、 Friedman检验适用场景公式python 代码Wilcoxon Signed-Rank Test和 cliffs deltaFriedman前言 记录一下自非参数检验的学习过程,如有不对请纠正。 非参数检验 …

ESP32蓝牙BLE连接米家温湿度计

ESP32蓝牙BLE连接米家温湿度计 文章目录 ESP32蓝牙BLE连接米家温湿度计简介需要准备的东西软件调试代码实现修改查找的名称 修改需要连接的服务和属性添加解析数据的代码 上电演示提示 简介 最近在学习低功耗蓝牙BLE(Bluetooth Low Energy)&#xff0c;刚好手里有个米家蓝牙温…

如何将Postman API测试转换为JMeter以进行扩展

2024软件测试面试刷题&#xff0c;这个小程序&#xff08;永久刷题&#xff09;&#xff0c;靠它快速找到工作了&#xff01;&#xff08;刷题APP的天花板&#xff09;-CSDN博客跳槽涨薪的朋友们有福了&#xff0c;今天给大家推荐一个软件测试面试的刷题小程序。​编辑https://…

递归与回溯 || 排列问题

目录 前言&#xff1a; 全排列 题解&#xff1a; 全排列 II 题解&#xff1a; 子集 题解&#xff1a; 组合 题解&#xff1a; 组合总和 题解&#xff1a; 电话号码的字母组合 题解&#xff1a; 字母大小写全排列 题解&#xff1a; 优美的排列 题解&#xff1a;…

Hbase搭建教程

Hbase搭建教程 期待您的关注 ☀小白的Hbase学习笔记 目录 Hbase搭建教程 1.上传hbase的jar包并解压 2.重新登录 3.启动zookeeper 4.配置环境变量 5.关闭ZK的默认配置 6.修改hbase-site.xml文件 7.修改regionservers文件 8.将配置好的文件分发给其它节点 9.配置环境变量…

shell编程中的运算符的讲解

在Linux操作系统中也可以使用expr来进行一些数值的运算&#xff0c;expr接受表达式作为参数&#xff0c;并打印计算结果。 对于某些复杂的表达式或早期不支持内嵌算术表达式的Shell环境&#xff0c;expr 仍然是一个可行的选择。 如上图所示&#xff0c;是使用变量sum来承接加和…

【算法训练记录——Day31】

Day31——贪心算法Ⅰ 1. 理论1.1 什么是贪心1.2 什么时候用贪心1.3 贪心算法一般步骤 2.leetcode455——分发饼干3.leetcode376——摆动序列 目标&#xff1a; 理论leetcode455——分发饼干leetcode376——摆动序列leetcode53 —— 最大字序和 1. 理论 算法随想录——贪心 1…

四十七、openlayers官网示例Image Filters——给地图添加锐化、浮雕、边缘等滤镜效果

官网demo示例&#xff1a; Image Filters 这篇讲的是如何给地图添加滤镜。 一看代码&#xff0c;&#xff0c;好家伙&#xff0c;信息量满满&#xff0c;全都看不懂。。。 咱只能一段一段扒。。。 首先添加一个底图到地图上&#xff0c;这个好理解。 const imagery new Til…

第十一章:接口

接口 文章目录 接口一、简介1.1 接口是什么1.2 接口的作用1.3 接口的开发与调用1.4 接口的组成 二、RESTful API三、json-server四、接口测试工具五、接口的创建 一、简介 1.1 接口是什么 接口是前后端通信的桥梁 简单理解&#xff1a;一个接口就是 服务中的一个路由规则&am…

十分钟学会微调大语言模型

有同学给我留言说想知道怎么训练自己的大语言模型&#xff0c;让它更贴合自己的业务场景。完整的大语言模型训练成本比较高昂&#xff0c;不是我们业余玩家能搞的&#xff0c;如果我们只是想在某个业务场景或者垂直的方面加强大模型的能力&#xff0c;可以进行微调训练。 本文…

ssl证书能认证多少个域名

SSL证书能认证的域名数量取决于SSL证书的类型。不同类型的SSL证书支持不同数量的域名&#xff1a; SSL证书&#xff0c;作为网络安全的基石之一&#xff0c;起着至关重要的作用。它通过为网站提供加密连接&#xff0c;确保数据传输的安全性和完整性&#xff0c;同时验证网站的真…

spark常见问题

写文章只是为了学习总结或者工作内容备忘&#xff0c;不保证及时性和准确性&#xff0c;看到的权当个参考哈&#xff01; 1. 执行Broadcast大表时&#xff0c;等待超时异常&#xff08;awaitResult&#xff09; 现象&#xff1a;org.apache.spark.SparkException: Exception…

答应我,完成单位投稿任务用对的方法别让自己受投稿之苦

在这个信息爆炸的时代,单位的形象塑造与品牌传播已成为不可忽视的关键环节。作为单位的信息宣传员,我深知每一次对外发声的重要性,它不仅是展示我们工作成果的窗口,更是连接公众、塑造品牌形象的桥梁。然而,在传统的投稿方式中,尤其是依赖于邮箱投稿,我经历了太多次的挫败与无奈…

LeetCode 算法:合并两个有序链表 c++

原题链接&#x1f517;&#xff1a;合并两个有序链表 难度&#xff1a;简单⭐️ 题目 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1&#xff1a; 输入&#xff1a;l1 [1,2,4], l2 [1,3,4] 输出&#xff1a;…

PHP学习笔记--初学

笔录&#xff1a;我是从黑马里面找的资料学习的&#xff0c;如果有人看我的笔记话&#xff0c;建议去看黑马程序课程&#xff0c;更详细一些。 目录 php定义&#xff0c;平台支持&#xff1a; 静态网站&#xff1a; 动态网站&#xff1a; 服务器概念&#xff1a; IP的概念…

JavaFX 分隔符

Separator类表示水平或垂直分隔线。它分割元素&#xff0c;不产生任何动作。 我们可以设计风格&#xff0c;应用视觉效果&#xff0c;并为分隔符设置动画。 默认情况下&#xff0c;分隔符是水平的。我们可以使用setOrientation方法改变它的方向。 Separator类扩展了Node类。…

2024/6/18(RBAC,查询用户权限,细粒度授权,选课,支付宝生成二维码支付,支付结果查询需要内网穿透)

黑马程序员【学成在线项目】,P141 测试沙箱支付宝_黑马学成在线支付宝沙箱-CSDN博客 需要内网穿透

reverse-android-实战喜马拉雅-ollvm

资料 1. apk: com.ximalaya.ting.android.apk. 2020年8月 可以使用 2. 抓包分析 java层分析 so层分析 登录的算法so是在 liblogin_encrypt.so中。 32位的&#xff0c; 用 IDA打开&#xff0c;查看 静态的导出函数。 打开 一个 首先看到 IDA VIEW 是一个横向 比较多的分支&am…

【3D模型库】机械三维模型库整理

1 开拔网 简介&#xff1a;开拔网是中国较早的机械设计交流平台&#xff0c;广受行业内的各个大学&#xff0c;公司以及行业人士的欢迎。网站有非常丰富的3D模型&#xff0c;CAD图纸&#xff0c;以及各类热门软件的下载。同时我们也为行业搭建一个平台&#xff0c;提供各类设计…