#nginx配置案例
示例配置 1:反向代理 + 负载均衡 + 缓存控制
http {# 定义后端服务器池,用于负载均衡upstream backend_servers {server backend1.example.com weight=3; # 权重为3server backend2.example.com weight=1; # 权重为1server backend3.example.com backup; # 备份服务器}# 全局缓存配置,缓存静态文件的请求proxy_cache_path /data/nginx/cache keys_zone=my_cache:10m levels=1:2 max_size=1g;proxy_temp_path /data/nginx/temp;server {listen 80;server_name www.example.com;# 启用缓存和压缩功能gzip on;gzip_types text/css application/javascript image/png;# 处理静态文件location /static/ {root /var/www/static; # 静态文件路径expires 30d; # 缓存30天}# 处理动态请求,使用负载均衡和反向代理location / {proxy_pass http://backend_servers; # 反向代理到后端服务器池proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_cache my_cache; # 启用缓存proxy_cache_valid 200 302 10m; # 成功和重定向的缓存时间为10分钟proxy_cache_valid 404 1m; # 404页面缓存1分钟}# 自定义错误页面error_page 500 502 503 504 /50x.html;location = /50x.html {root /var/www/errors; # 错误页面路径}}
}
解析与说明:
关键字: http
作用: 定义HTTP服务器相关的全局配置,并且通过 upstream 来定义负载均衡的后端服务器池。proxy_cache_path 配置了缓存机制。
语法规则: http 块是Nginx的全局配置块之一,定义在该块中的配置会影响所有的 server 块。
upstream 块:
关键字: upstream
自定义名称: backend_servers(定义的服务器池的名称,供后续使用)
作用: 定义负载均衡的服务器集群。server backend1.example.com weight=3 表示 backend1 服务器的权重是3,而 backend2 的权重是1,表示更多请求会被分配给 backend1。server backend3.example.com backup 是备份服务器,仅在其他服务器不可用时启用。
语法规则: upstream 块中的服务器定义了负载均衡的后端服务器池,可以通过proxy_pass引用这些服务器。
proxy_cache_path 和 proxy_temp_path:
关键字: proxy_cache_path, proxy_temp_path
自定义名称: /data/nginx/cache 是缓存存储路径,my_cache 是缓存区域的名称。
作用: 定义缓存路径及缓存区。keys_zone=my_cache:10m 定义了一个名称为 my_cache 的缓存区域,大小为10MB,max_size=1g 限制缓存总大小为1GB。
语法规则: proxy_cache_path 定义了缓存的路径、区域名称及缓存大小限制等。
server 块:
关键字: server
自定义名称: www.example.com(域名)
作用: 定义虚拟主机,处理对 www.example.com 的请求。监听80端口。
语法规则: server 块用于定义虚拟主机,每个 server 块包含域名、端口以及与之相关的多个 location。
location /static/ 块:
关键字: location, root, expires
自定义路径: /static/(URL前缀),/var/www/static(静态文件路径)
作用: 处理 /static/ 路径下的请求。通过 root 指定静态资源的物理路径,expires 30d 指定浏览器缓存30天。
语法规则: location 块用于匹配请求的路径。root 定义该路径对应的文件系统目录。
location / 块:
关键字: location, proxy_pass, proxy_cache
自定义名称: backend_servers(引用的负载均衡服务器池)
作用: 处理动态请求,使用 proxy_pass 将请求转发给 upstream 定义的服务器池,使用 proxy_cache 对动态内容进行缓存。
语法规则: proxy_pass 用于将请求代理到后端服务器,proxy_cache 启用Nginx的缓存机制。
错误页面:
关键字: error_page, location
自定义路径: /50x.html(错误页面路径)
作用: 定义自定义的服务器错误页面。当出现 500, 502, 503, 504 错误时,返回 50x.html。
语法规则: error_page 用于自定义错误页面。location = 用于精确匹配该错误页面路径。
示例配置 2:Nginx 作为反向代理,支持 HTTPS 和 HTTP/2
http {# 定义后端服务器upstream backend {server 127.0.0.1:8080;}server {listen 443 ssl http2; # 启用HTTPS和HTTP/2server_name www.example.com;# SSL 证书和密钥ssl_certificate /etc/nginx/ssl/example.com.crt;ssl_certificate_key /etc/nginx/ssl/example.com.key;# SSL安全配置ssl_protocols TLSv1.2 TLSv1.3;ssl_ciphers HIGH:!aNULL:!MD5;# 开启Gzip压缩gzip on;gzip_types text/plain text/css application/javascript;# 代理请求到后端location / {proxy_pass http://backend; # 代理到后端服务器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 /static/ {root /var/www/html/static;expires 30d;}}# HTTP到HTTPS的重定向server {listen 80;server_name www.example.com;location / {rewrite ^ https://$server_name$request_uri? permanent; # 301重定向到HTTPS}}
}
解析与说明:
upstream 块:
关键字: upstream
自定义名称: backend(后端服务器池名称)
作用: 定义反向代理的后端服务器池。此处仅有一台服务器,位于 127.0.0.1:8080。
SSL 和 HTTP/2 配置:
关键字: listen, ssl_certificate, ssl_certificate_key, ssl_protocols
自定义路径: /etc/nginx/ssl/example.com.crt 和 /etc/nginx/ssl/example.com.key(SSL证书和密钥路径)
作用: 在443端口启用HTTPS和HTTP/2协议,配置SSL证书及安全协议。
语法规则: listen 443 ssl http2 启用HTTPS和HTTP/2协议,ssl_protocols 指定支持的TLS版本。
HTTP到HTTPS重定向:
关键字: rewrite
内置变量: $server_name, $request_uri
作用: 将所有HTTP请求重定向到HTTPS版本。
语法规则:
rewrite ^ https://$server_name$request_uri? permanent;使用 rewrite 指令进行正则匹配,并将请求重定向到HTTPS。
proxy_pass 指令:
关键字: proxy_pass, proxy_set_header
自定义名称: backend(定义的服务器池)
作用: 将客户端请求转发给定义的后端服务器池 backend,并保持客户端请求头信息(如IP、Host等)。
静态文件缓存:
关键字: expires
作用: 缓存 /static/ 路径下的文件,浏览器缓存时间设置为30天。
语法规则: expires 30d 指定缓存时长。
总结
关键字: server, upstream, location, proxy_pass, ssl_certificate, rewrite 等是Nginx中的关键字,具有特定的语法和作用。自定义名称: 如 backend_servers、my_cache、example.com 等名称和路径根据需求自定义,便于引用。语法规则: Nginx的语法基于块和指令的组合。块如 http、server、location 用于定义作用范围,指令如 proxy_pass、ssl_certificate、expires 用于定义具体行为。
解释重定向:
下面是对
rewrite ^ https://$server_name$request_uri? permanent;
这一 Nginx 指令中每个部分的详细解释。该指令用于将所有HTTP请求永久重定向(301重定向)到对应的HTTPS版本。
-
rewrite:
解释: Nginx的 rewrite 指令用于修改请求的URI或URL。它可以通过正则表达式来匹配请求的URL,并根据需要重定向到新的URL。
作用: 告诉Nginx如何处理和重定向请求的URI。 -
^:
解释: 这是一个正则表达式符号,表示字符串的开始。
作用: 它告诉Nginx匹配请求的URL从头开始,即匹配所有请求的URI。这里 ^ 独立使用,表示匹配任意URI。 -
https://:
解释: 这是要重定向到的新URL的协议部分。https:// 指定重定向到HTTPS协议,强制将请求从HTTP切换到HTTPS。
作用: 将原始的HTTP请求转换为HTTPS请求。 -
$server_name:
解释: 这是Nginx中的一个内置变量,表示当前请求的服务器名称(即域名)。该变量在每个请求中自动填充,例如 www.example.com。
作用: 使用当前请求的服务器名来构建新的重定向URL,确保请求保持在同一个域名下。 -
$request_uri:
解释: 这是Nginx的另一个内置变量,表示请求的完整URI(包括请求路径和查询字符串)。
例如,客户端请求/path/to/page?query=value,
$request_uri 将被替换为 /path/to/page?query=value。作用: 保持请求的URI不变,确保重定向后的路径和查询参数与原请求一致。
-
?:
解释: ? 是一个符号,表示查询参数的分隔符。在URL中,? 用于将查询字符串与主路径分开。例如:/path?param=value。
作用: 保证在重定向过程中,查询参数(如果有)也被正确传递。这里的 ? 仅用于保留查询字符串,即使原请求中没有查询参数。 -
permanent:
解释: 这是一个标志,告诉Nginx返回HTTP状态码 301,表示永久重定向。浏览器或搜索引擎会将该重定向信息缓存,并认为资源的地址已经永久改变。
作用: 表示这是一个永久重定向(301状态码),会通知浏览器更新缓存中的URL以指向新地址。与 permanent 相对的是 redirect(或 302),表示临时重定向。
整体效果:
当rewrite ^ https://$server_name$request_uri? permanent;这一指令执行时,Nginx会将所有传入的HTTP请求重定向到对应的HTTPS版本,并保持路径和查询字符串不变。
请求流程举例: 假设用户访问了以下URL:
http://www.example.com/page?id=123
正则表达式 ^ 会匹配整个URI。
$server_name 将被替换为 www.example.com。
$request_uri 将被替换为 /page?id=123。
? 保留查询参数,即 id=123。
permanent 会将响应的状态码设为 301(永久重定向)。
最终重定向URL: https://www.example.com/page?id=123
关键点总结:
rewrite 是Nginx指令,用于重定向请求。
^ 匹配从头到尾的所有请求URI。
https:// 强制将请求协议更改为HTTPS。
$server_name 替换为当前请求的服务器名。
$request_uri 保留原请求的路径和查询参数。
? 保留查询字符串。
permanent 告诉浏览器这是一个永久重定向,并返回 301 状态码。
相关文章:
#nginx配置案例
示例配置 1:反向代理 负载均衡 缓存控制 http {# 定义后端服务器池,用于负载均衡upstream backend_servers {server backend1.example.com weight3; # 权重为3server backend2.example.com weight1; # 权重为1server backend3.example.com backup; …...
STM32—I2C通信外设
1.I2C外设简介 STM32内部集成了硬件I2C收发电路,可以由硬件自动执行时钟生成、起始终止条件生成、应答位收发、数据收发等功能,减轻CPU的负担支持多主机模型(可变多主机)支持7位/10位地址模式(11110......)支持不同的通…...
Java-测试-Mockito 入门篇
之前很长一段时间我都认为测试就是使用SpringBootTest类似下面的写法: SpringBootTest class SysAuthServiceTest {AutowiredSysRoleAuthMapper sysRoleAuthMapper;Testpublic void test() {QueryWrapper<SysRoleAuth> queryWrapper new QueryWrapper<&g…...
【jupyter notebook】环境部署及pycharm连接虚拟机和本地两种方式
Python数据处理分析简介 Python作为当下最为流行的编程语言之一 可以独立完成数据分析的各种任务数据分析领域里有海量开源库机器学习/深度学习领域最热门的编程语言在爬虫,Web开发等领域均有应用 与Excel,PowerBI,Tableau等软件比较 Excel有…...
TypeScript异常处理
1.异常的概念 程序运行中意外发生的情况就成为异常 例子: //除法运算function chu(num1:number,num2:number){if(num20){//throw 抛出异常throw new Error(除数不能为零)}let num:numbernum1/num2console.log(num) }//程序出现异常后会停止运行// 捕获异常try{ /…...
go的学习笔记
中文标准库文档:https://studygolang.com/pkgdoc 第一段代码 所有代码的主文件都是main.go,下面的代码直接在项目里面创建main.go运行 package main // 声明文件所在的包,每个go文件必须有归属的包import "fmt" // 引入程序需要的包,为了使用包下的函数,比如Print…...
卷积和转置卷积的输出尺寸计算
卷积和转置卷积的输出尺寸计算 卷积 h是输出的高,h是输入的高,k_h是卷积核的高 w类似stride1 h h - k_h padding*2 1通用公式 stride1就是上面的公式 h (h - k_w 2*padding stride)//stride 一些常见的卷积 高宽不变的卷积:kernel…...
vue3+ts 使用amCharts展示地图,1.点击左侧国家,可以高亮并放大右侧地图对应的国家。 2.展示数据球。
效果图展示: 1.点击左侧国家,可以高亮并放大右侧地图对应的国家。 2.展示数据球。 下载依赖 yarn add amcharts/amcharts5其中,props.countryData的数据格式为 [{ “country”: “加拿大”, “code”: “CA”, “deviceCount”: 1 },{ “c…...
汽车无钥匙启动功能工作原理
移动管家无钥匙启动是一种科技化的汽车启动方式,它允许车主在不使用传统钥匙的情况下启动车辆。这种技术通过智能感应系统实现,车主只需携带智能钥匙,当靠近车辆时,车辆能够自动解锁并准备启动。启动车辆时,车主无…...
C++标准的一些特性记录:C++11的auto和decltype
文章目录 auto容器遍历配合lambda表达式decltype两者对引用类型的处理是相同的decltype保留const,而auto不会保留const在C++11中,引入了两个新的关键字,auto和decltype两个关键字,都是用于做类型推断。但是使用的场景有些区别。 auto 容器遍历 auto这个关键字,我个人在编…...
【Elasticsearch系列四】ELK Stack
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...
【新手上路】衡石分析平台使用手册-认证方式
认证方式 用户登录衡石系统时,系统需要对输入的用户名和密码进行验证,保证系统的安全。衡石提供 CAS、SAML2、OAUTH2等多种单点登录认证方式。在 SSO 单点登录中,衡石是服务提供者 SP(Service Provider)为用户提供所…...
数字电路与逻辑设计-触发器功能测试及其应用
一、实验目的 1.验证基本RS、JK、D、T和T’触发器的逻辑功能及使用方法; 2.能进行触发器之间的相互转换; 3.学习触发器的一些应用。 二、实验原理 触发器具有两个能够自行保持的稳定状态,用以表示逻辑状…...
【网站架构部署与优化】web服务与http协议
文章目录 HTMLHTML 概述HTML 语法规则HTML 文件结构头标签中常用标签静态网页与动态网页1. 静态网页2. 动态网页3. 动态网页语言 HTTP协议概述主要的HTTP版本包括:HTTP方法GET与POST方法的比较 HTTP状态码分类及常见状态码HTTP常见状态码 HTTP 请求流程分析1. 请求报…...
【字符函数】strcpy函数(字符串复制函数)+strcat函数(字符串追加)+strcmp函数(字符串比较)【笔记】
1.复制函数--------------strcpy函数 函数使用 char*strcpy(char* destination, const char* source) strcpy函数用于拷贝字符串,即将一个字符串中的内容拷贝到另一个字符串中(会覆盖原字符串内容)。它的参数是两个指…...
codetop字符串刷题,刷穿地心!!不再畏惧!!暴打面试官!!
主要供自己回顾与复习,题源codetop标签字符串近半年,会不断更新 1.有效的括号字符串2.括号生成3.最长单词4.字符串转换整数(atoi)5.整数转罗马数字6.罗马数字转整数7.比较版本号8.最长公共前缀9.面试题17.15.最长单词10.验证IP地址11.面试题01.06.字符串…...
快速体验Linux发行版:DistroSea详解与操作指南
DistroSea 是一个功能强大的在线平台,允许用户在无需下载或安装的情况下,通过浏览器直接测试多种Linux和BSD发行版。该平台非常适合Linux爱好者、系统管理员和开发者,提供一个简便的方式来体验各种操作系统而无需影响本地设备。 为什么选择D…...
Java设计模式—面向对象设计原则(二) --------> 里氏代换原则 LSP (完整详解,附有代码+案列)
文章目录 里氏代换原则3.2.1 概述3.2.2 改进上述代码 里氏代换原则 里氏代换原则:Liskov Substitution Principle,LSP 3.2.1 概述 里氏代换原则是面向对象设计的基本原则之一。 里氏代换原则:任何基类可以出现的地方,子类一定…...
使用ShardingSphere实现MySql的分库分表
目录 一 什么是ShardingSphere分库分表 二 代码实现 1.导入相关依赖 2.配置相关参数 3.创建学生类以及mapper接口 4.实现 StandardShardingAlgorithm接口自定义分片算法 唐洋洋我知道你在看!!!嘿嘿 一 什么是ShardingSphere分库分表 我们平时在设计数据库的时候…...
为什么 Feign 要用 HTTP 而不是 RPC?
一、引言 在现代微服务架构中,服务之间的通信是至关重要的环节。Feign 是一种常用的声明式 HTTP 客户端工具,它简化了服务间的调用过程。然而,在服务通信的领域中,除了基于 HTTP 的方式,还有 RPC(Remote Pr…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...
《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...
大数据零基础学习day1之环境准备和大数据初步理解
学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...
Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...
Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...
成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...
Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...
