当前位置: 首页 > news >正文

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 的 DirectoryIndexfastcgi_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 = nginxgroup = 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代码文件,如图:

 

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

 

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

相关文章:

  • 赋能AI未来,景联文科技推出高质量亿级教育题库、多轮对话以及心理大模型数据
  • 信息检索(53):Document Expansion by Query Prediction
  • Spring框架学习笔记(本地印象笔记搬运)(整理中)
  • TensorRT-LLM加速框架的基本使用
  • 数据库原理与安全复习笔记(未完待续)
  • 【Linux】使用 iptables 验证访问HDFS 所使用到的端口
  • 光纤通讯资料收集
  • java课程设计GUI学生信息管理系统
  • 爬虫阶段思考
  • 【Rust】——所有可能会用到模式的位置
  • Spring Cloud学习:如何实现Gateway 服务网关限流
  • ESP32 esp-idf esp-adf环境安装及.a库创建与编译
  • OpenCV颜色检测
  • 网络编程(六)TCP并发服务器
  • B3996 [洛谷 202406GESP 模拟 三级] 小洛的数字游戏
  • 【159天】尚学堂高琪Java300集视频精华笔记(128)
  • 【Amaple教程】5. 插件
  • 【刷算法】求1+2+3+...+n
  • Docker 笔记(2):Dockerfile
  • isset在php5.6-和php7.0+的一些差异
  • JavaScript的使用你知道几种?(上)
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • passportjs 源码分析
  • Shadow DOM 内部构造及如何构建独立组件
  • Spring Cloud Feign的两种使用姿势
  • Spring Cloud中负载均衡器概览
  • SQLServer插入数据
  • Vue2.x学习三:事件处理生命周期钩子
  • vue从创建到完整的饿了么(18)购物车详细信息的展示与删除
  • windows下mongoDB的环境配置
  • 高性能JavaScript阅读简记(三)
  • 精彩代码 vue.js
  • 算法-图和图算法
  • 无服务器化是企业 IT 架构的未来吗?
  • 小程序测试方案初探
  • 译米田引理
  • 曜石科技宣布获得千万级天使轮投资,全方面布局电竞产业链 ...
  • 支付宝花15年解决的这个问题,顶得上做出十个支付宝 ...
  • #100天计划# 2013年9月29日
  • #每日一题合集#牛客JZ23-JZ33
  • $.ajax()方法详解
  • (2024最新)CentOS 7上在线安装MySQL 5.7|喂饭级教程
  • (51单片机)第五章-A/D和D/A工作原理-A/D
  • (C#)Windows Shell 外壳编程系列9 - QueryInfo 扩展提示
  • (c语言)strcpy函数用法
  • (delphi11最新学习资料) Object Pascal 学习笔记---第13章第6节 (嵌套的Finally代码块)
  • (HAL库版)freeRTOS移植STMF103
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (windows2012共享文件夹和防火墙设置
  • (二开)Flink 修改源码拓展 SQL 语法
  • (分布式缓存)Redis分片集群
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (附源码)计算机毕业设计SSM基于健身房管理系统
  • (四)【Jmeter】 JMeter的界面布局与组件概述
  • (转)fock函数详解