Nginx实现动静分离

目录

静态资源

动态资源

区别和应用场景

[1. 准备环境](#1. 准备环境)

[2. 配置代理](#2. 配置代理)

[3. 静态资源主机配置](#3. 静态资源主机配置)

[4. 动态资源主机配置](#4. 动态资源主机配置)

[5. 访问静态和动态资源测试](#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 分别处理动态和静态。

|-----------|-----------------|----------------|
| localhost | Roucky_linux9.4 | 192.168.226.20 |
| localhost | Roucky_linux9.4 | 192.168.226.21 |
| localhost | Roucky_linux9.4 | 192.168.226.22 |

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

bash 复制代码
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
bash 复制代码
yum install -y nginx
systemctl enable --now nginx

分别修改默认打开的目录

bash 复制代码
#对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文件

bash 复制代码
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配置文件

bash 复制代码
nginx -t

重新加载Nginx配置

bash 复制代码
nginx -s reload

3. 静态资源主机配置

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

bash 复制代码
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配置文件

bash 复制代码
nginx -t

重新加载Nginx配置

bash 复制代码
nginx -s reload

创建一个自定义发布目录

bash 复制代码
mkdir -p /home/www/nginx
cd /home/www/nginx

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

4. 动态资源主机配置

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

bash 复制代码
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配置文件

bash 复制代码
nginx -t

重新加载Nginx配置

bash 复制代码
nginx -s reload

yum 安装php

bash 复制代码
# 安装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配置文件

bash 复制代码
vim /etc/php-fpm.d/www.conf +24

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

user = nginx

group = nginx

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

bash 复制代码
mkdir -p /home/nginx/html

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

bash 复制代码
sudo tee /home/nginx/html/index.php << 'EOF'
<?php
phpinfo();
?>
EOF

重启php服务

bash 复制代码
systemctl restart php-fpm

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

测试1:访问静态资源

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

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

按照上述格式访问如下:

测试2:访问动态资源

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

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

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

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

相关推荐
Knight_AL1 天前
Docker 中的端口映射原理:为什么 Nginx 要 `listen 80`,而不是“随便写端口”
nginx·docker·容器
虹梦未来1 天前
【运维心得】Ubuntu2404编译nginx隐藏Server信息
运维·服务器·nginx
tgethe1 天前
Nginx笔记
运维·笔记·nginx
invicinble2 天前
对于nginx(一,认识nginx)
运维·nginx
徒手千行代码无bug2 天前
Nginx upstream 负载均衡 404,单节点转发正常的根因与解决
运维·nginx·负载均衡
irisart2 天前
第二章【NGINX 开源功能】—— 七层反向代理(下)
运维·nginx
xixiyuguang2 天前
nginx tar离线安装 ubuntu22.04
运维·nginx
丁丁丁梦涛2 天前
nginx解决域名代理到IP+端口的平台静态资源和接口地址问题
运维·tcp/ip·nginx
苹果醋32 天前
24.记录Vue项目iview组件日期获取时间少一天
java·运维·spring boot·mysql·nginx
丁丁丁梦涛2 天前
nginx在多层服务器代理接口地址的应用
运维·服务器·nginx