当前位置:首页 > 技术分析 > 正文内容

Nginx动静分离原理详解(图文全面总结)

动静分离在大型架构常用手段,也是大厂经常考察核心点,下面我重点详解Nginx动静分离原理@mikechen

作者:mikechen

文章来源:mikechen.cc

动静分离

动静分离,顾名思义,就是将网站或应用中动态内容 (Dynamic Content) 和 静态内容 (Static Content) 分开处理和部署的技术。

常见的静态内容,包含: HTML 文件、CSS 文件、JavaScript 文件、图片 (如 PNG, JPG, GIF)、视频、音频、字体文件等。

动态内容,指的的需要与数据库交互的内容。

比如:页面、用户登录后的个人中心、实时更新的数据接口…等。

动态内容,通常由后端编程语言(如 PHP, Python, Java…等)生成。

为什么要做动静分离?

进行动静分离的主要目的是为了提升网站或应用的性能、可维护性和可扩展性。

比如:静态资源分离,可以直接通过 Nginx 或 CDN 服务器提供。

这些服务器通常在处理静态文件方面进行了高度优化,例如:缓存机制…等,可以更快地响应用户的请求。

并且,前端开发人员可以专注于静态资源的优化、和部署。

后端开发人员可以专注于动态逻辑的开发和维护,职责更加清晰,降低了维护的复杂性。

Nginx动静分离原理

Nginx 实现动静分离的核心在于其强大的 location 模块、和相关的指令。

Nginx 实现动静分离,通过请求路由机制(location匹配),来判断请求属于哪种类型,并进行相应处理。

流程如下:

客户端请求 --> Nginx    |-- 请求动态内容,如 /index.php --> 反向代理到后端(FastCGI、Tomcat、Node.js等)   |   |-- 请求静态资源,如 /css/style.css --> Nginx 本地直接读取 /static/css/style.css

通过配置不同的 location 块,Nginx 可以根据请求的 URI (统一资源标识符,也就是网址) ,将请求分发到不同的处理方式或后端服务器。

比如:

server {    listen 80;    server_name www.example.com;     # 静态资源处理:如 /static/js/app.js    location ^~ /static/ {        root /usr/share/nginx/html/;        expires 30d;        access_log off;    }     # 后端接口请求转发:如 /api/user    location /api/ {        proxy_pass http://127.0.0.1:8080;        proxy_set_header Host $host;        proxy_set_header X-Real-IP $remote_addr;        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;    }     # 默认请求(前端路由支持)    location / {        root /usr/share/nginx/html/;        index index.html;        try_files $uri $uri/ /index.html;    }}

^~ /static/:将 /static/ 前缀的请求直接映射到本地静态目录;

/api/:转发给 Java 后端(用于 REST 接口请求);

这样,通过将静态资源和动态内容分离处理,从而显著提升网站的性能。

本篇已收于mikechen原创超30万字《阿里架构师进阶专题合集》里面。

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/4620.html

标签: java nginx
分享给朋友:

“Nginx动静分离原理详解(图文全面总结)” 的相关文章

发行版Vanilla OS 2发布稳定版:彻底重写、改变使用Linux的方式

Vanilla OS 是去年崭露头角的 Linux 发行版,最初的 1.0 版本基于 Ubuntu 构建 —— 亮点之一是系统核心“不可变”。后来改用 Debian 测试分支 (Debian Sid),免费且开源,默认桌面环境是 GNOME。什么是不可变 Linux 发行版?不可变发行版确保操作系统...

手把手教你Vue之父子组件间通信实践讲解【props、$ref 、$emit】

组件是 vue.js 最强大的功能之一,而组件实例的作用域是相互独立的,这就意味着不同组件之间的数据无法相互引用。那么组件间如何通信,也就成为了vue中重点知识了。这篇文章将会通过props、$ref和 $emit 这几个知识点,来讲解如何实现父子组件间通信。转载链接:https://www.jia...

Java教程:gitlab-使用入门

1 导读本教程主要讲解了GitLab在项目的环境搭建和基本的使用,可以帮助大家在企业中能够自主搭建GitLab服务,并且可以GitLab中的组、权限、项目自主操作GitLab简介GitLab环境搭建GitLab基本使用(组、权限、用户、项目)2 GitLab简介GitLab是整个DevOps生命周期...

「云原生」Containerd ctr,crictl 和 nerdctl 命令介绍与实战操作

一、概述作为接替Docker运行时的Containerd在早在Kubernetes1.7时就能直接与Kubelet集成使用,只是大部分时候我们因熟悉Docker,在部署集群时采用了默认的dockershim。在V1.24起的版本的kubelet就彻底移除了dockershim,改为默认使用Conta...

美国民众负债累累 但今年假期消费者支出仍将创下新高

智通财经APP获悉,在迎接假期之际,许多美国人已经背负了创纪录的信用卡债务。然而,今年假期消费者支出仍将创下新高。根据美国零售联合会(NRF)上周发布的报告,预计今年11月1日至12月31日期间的消费总额将达到创纪录的9795亿至9890亿美元之间。NRF首席经济学家Jack Kleinhenz表示...

html5迁移到微信小程序的 方法 亲测可用

切图网习惯于在做小程序之前先做成html5+vuejs的形式,因为html5切图是我们比较熟悉的方式,而且有专业的工具 以及浏览器调试也会更加的方便 灵活,效率高,而且html5的方式可以方便预览看效果,方便调整,当html5页面做好确认没问题以后 再转成小程序或者官方出品wepy的方式,这个时候就...