【Nginx】Nginx进阶指南:解锁代理与负载均衡的多样玩法

在Web服务的世界里,Nginx就像是一位多面手,它不仅能作为高性能的Web服务器,还能轻松胜任代理服务器、负载均衡器等多种角色。今天,我们就来深入探索Nginx的几个常见应用场景,通过实际案例和关键配置解析,带你领略Nginx的无限魅力!


一、代理数据库:守护你的数据安全

场景描述

在分布式系统中,数据库往往是系统的核心,为了保护数据库免受直接访问的风险,我们通常会使用Nginx作为数据库的代理层。这样,外部请求首先到达Nginx,再由Nginx转发到实际的数据库服务器,既增加了安全性,又便于实现负载均衡。

关键配置与解释

stream {upstream mysql {hash $remote_addr consistent;  # 使用一致性哈希算法,根据客户端IP分配请求到固定的后端服务器server 192.168.xxx.x:3306 weight=1 max_fails=2 fail_timeout=3600s;  # 定义后端MySQL服务器,设置权重、最大失败次数和失败超时时间}server {listen 9002;  # 代理服务器监听的端口proxy_connect_timeout 3600s;  # 连接后端服务器的超时时间proxy_timeout 36000s;  # 代理超时时间,这里设置为10小时(示例中5分钟为笔误,实际应根据需求调整)proxy_pass mysql;  # 将请求转发到上面定义的mysql上游}
}

解释

  • upstream块定义了后端服务器组,这里使用hash算法确保同一客户端的请求总是被转发到同一台后端服务器,保持会话一致性。
  • server块配置了代理服务器的监听端口和转发规则,proxy_timeout应合理设置,避免长时间占用资源。

二、代理WebSocket:实现实时通信的桥梁

场景描述

WebSocket是一种在单个TCP连接上进行全双工通信的协议,广泛应用于实时聊天、在线游戏等场景。Nginx可以轻松代理WebSocket连接,确保客户端与服务器之间的稳定通信。

关键配置与解释

location /usvapi {proxy_pass http://xxxxxx/usvapi;  # 转发到实际的WebSocket服务端proxy_redirect off;  # 关闭重定向,确保WebSocket连接不受影响proxy_set_header Host $http_host;  # 设置请求头中的Host字段proxy_set_header X-Real-IP $remote_addr;  # 传递客户端真实IPproxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  # 传递客户端IP链proxy_set_header Upgrade $http_upgrade;  # 升级协议为WebSocketproxy_set_header Connection "upgrade";  # 保持长连接
}

解释

  • proxy_pass指定了WebSocket服务的实际地址。
  • proxy_set_header系列指令用于传递必要的请求头信息,特别是UpgradeConnection,它们是WebSocket连接建立的关键。

三、静态资源服务:加速你的网站加载

场景描述

对于包含大量静态资源(如图片、CSS、JavaScript文件)的网站,使用Nginx直接提供静态资源服务可以显著提高加载速度,减轻后端服务器的负担。

关键配置与解释

server {listen 80;server_name example.com;location /static/ {alias /path/to/your/static/files/;  # 静态文件存放路径expires 30d;  # 设置缓存过期时间,减少重复请求access_log off;  # 可选:关闭访问日志,减少I/O压力}# 其他配置...
}

解释

  • location /static/匹配以/static/开头的请求。
  • alias指定了静态文件的实际存放路径。
  • expires设置了浏览器缓存静态资源的时间,提高再次访问时的加载速度。

四、HTTPS反向代理:保障数据传输安全

场景描述

随着网络安全意识的提升,HTTPS已成为网站的标准配置。Nginx可以作为反向代理,将HTTP请求转换为HTTPS,为后端服务提供加密保护。

关键配置与解释

server {listen 443 ssl;server_name example.com;ssl_certificate /path/to/your/cert.pem;  # SSL证书路径ssl_certificate_key /path/to/your/key.pem;  # SSL私钥路径location / {proxy_pass http://backend_server;  # 转发到后端HTTP服务proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;# 其他必要的proxy_set_header...}
}

解释

  • listen 443 ssl;表示监听443端口并启用SSL。
  • ssl_certificatessl_certificate_key指定了SSL证书和私钥的路径。
  • proxy_pass将加密后的请求转发到后端HTTP服务,实现HTTPS到HTTP的转换。

总结

Nginx以其灵活性和高性能,在Web服务领域占据着举足轻重的地位。无论是代理数据库、WebSocket,还是提供静态资源服务、HTTPS反向代理,Nginx都能游刃有余。通过合理配置,我们可以充分发挥Nginx的潜力,为网站或应用提供稳定、高效、安全的服务。希望今天的分享能激发你对Nginx更多可能性的探索,让我们一起在技术的海洋中乘风破浪!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

原创-锐能微82xx系列电能计量芯片软件驱动开发与精度校准流程完全指南

引言 电能计量芯片的软件驱动开发是整个计量系统的核心,它直接决定了计量精度、系统稳定性和功能完整性。锐能微82xx系列电能计量芯片凭借其强大的数字信号处理能力和丰富的功能特性,为开发者提供了灵活的软件开发平台。本文将详细介绍82xx系列芯片的软…

如何使用 Apache Ignite 作为 Spring 框架的缓存(Spring Cache)后端

这份文档是关于 如何使用 Apache Ignite 作为 Spring 框架的缓存(Spring Cache)后端,实现方法级别的缓存功能。 这和前面我们讲的 Spring Data Ignite 是两个不同的概念。我们先明确区别,再深入理解。🔁 一、核心区别…

Android 超大图片、长图分割加载

在Android开发中,处理大图片的加载是一个常见且重要的问题,尤其是在需要显示高分辨率图片时。大图片如果不正确处理,可能会导致内存溢出或应用性能下降。下面是一些常用的策略和技术来优化大图片的加载:1. 使用图片压缩库a. Glide…

Linux:理解操作系统

文章目录数据流动操作系统数据流动 软件运行,必须先加载到内存,本质要把磁盘上的文件 加载到内存。 我们写的算法是处理存储器里面的数据,数据就是文件,我们自己写的可执行文件。 图中QQ就是软件,加载内存后进行下一步…

【每日一错】PostgreSQL的WAL默认段大小

文章目录题目扩展学习WAL工作原理流程图题目 扩展学习 WAL(Write Ahead Log)预写日志: WAL是PostgreSQL先写日志、后写数据的机制,用来防止数据丢失、提升数据恢复能力。 流程: 事务先写日志文件(WAL&…

Visual Studio Code 使用指南 (2025年版)

Visual Studio Code (VS Code) 是一款由微软开发的免费、开源、跨平台的现代化轻量级代码编辑器,凭借其强大的核心功能、丰富的扩展生态系统以及高度可定制性,已成为全球数百万开发者的首选工具。本指南旨在帮助您快速上手 VS Code,掌握其核心…

【Java】JVM虚拟机(java内存模型、GC垃圾回收)

一、Java内存模型(JMM)JMM(Java Memory Model,Java 内存模型)是 Java 虚拟机规范中定义的一种抽象概念,用于规范 Java 程序中多线程对共享内存的访问规则,解决可见性、原子性和有序性问题&#…

二叉树算法之【二叉树的层序遍历】

目录 LeetCode-102题 LeetCode-102题 给定二叉树的根节点root&#xff0c;返回其节点值的层序遍历&#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 class Solution {public List<List<Integer>> levelOrder(TreeNode root) {// checkif (r…

uniapp+vue3——通知栏标题纵向滚动切换

介绍 取巧&#xff0c;使用纵向轮播实现 <!-- 通知栏 --> <view class"noticeBox" v-if"notice.length>0"><image src"/static/images/index/noticeIcon.png" mode"aspectFill"></image><swiper class&…

BilldDesk 开源、免费、吊打收费软件!白嫖党最爱!远程控制神器,没有任何连接次数和画质限制,同时显示多屏、屏幕墙等高级功能

远程控制软件哪个好用&#xff1f;TeamViewer收费太贵&#xff0c;向日葵限制太多&#xff0c;QQ远程又不稳定……别担心&#xff01;今天给大家推荐一款完全免费、开源的远程控制神器——BilldDesk&#xff01;它不仅功能强大&#xff0c;而且支持Windows、macOS、Linux、Andr…

ios UIAppearance 协议

一、前言 iOS 上提供了一个比较强大的工具UIAppearance&#xff0c;我们通过UIAppearance设置一些UI的全局效果&#xff0c;这样就可以很方便的实现UI的自定义效果又能最简单的实现统一界面风格。 (id)appearance ; 这个是这个协议里最重要的方法了 . 这个方法是统一全部改&am…

进阶数据结构:用红黑树实现封装map和set

​ 嘿,各位技术潮人!好久不见甚是想念。生活就像一场奇妙冒险,而编程就是那把超酷的万能钥匙。此刻,阳光洒在键盘上,灵感在指尖跳跃,让我们抛开一切束缚,给平淡日子加点料,注入满满的 passion。准备好和我一起冲进代码的奇幻宇宙了吗?Let’s go! 我的博客:yuanManGa…

【数据结构初阶】--二叉树(五)

&#x1f525;个人主页&#xff1a;草莓熊Lotso &#x1f3ac;作者简介&#xff1a;C研发方向学习者 &#x1f4d6;个人专栏&#xff1a; 《C语言》 《数据结构与算法》《C语言刷题集》《Leetcode刷题指南》 ⭐️人生格言&#xff1a;生活是默默的坚持&#xff0c;毅力是永久的…

redis布隆过滤器解决缓存击穿问题

在电商系统中&#xff0c;商品详情页是一个典型的高频访问场景。当用户请求某个商品的详情时&#xff0c;系统会优先从缓存中获取数据。如果缓存中没有该商品的详情&#xff0c;系统会去数据库查询并更新缓存。然而&#xff0c;如果某个热门商品的缓存失效&#xff0c;大量请求…

1+1>2!特征融合如何让目标检测更懂 “场景”?

来gongzhonghao【图灵学术计算机论文辅导】&#xff0c;快速拿捏更多计算机SCI/CCF发文资讯&#xff5e;在多模态大模型&#xff08;MLLM&#xff09;时代&#xff0c;特征融合与目标检测的研究方向正变得愈发关键。从红外与可见光图像的融合&#xff0c;到语音活动检测中的特征…

详解赛灵思SRIO IP并提供一种FIFO封装SRIO的收发控制器仿真验证

概述RapidIO标准定义为三层&#xff1a;逻辑层、传输层、物理层。逻辑层&#xff1a;定义总体协议和包格式&#xff0c;包含设备发起/完成事务的必要信息。传输层&#xff1a;提供包传输的路由信息&#xff08;对顶层不可见&#xff09;。物理层&#xff1a;描述设备级接口细节…

深度学习:简介与任务分类总览

一、什么是深度学习&#xff1f;1.1 深度学习的定义深度学习&#xff08;Deep Learning&#xff09;是机器学习的一种特殊形式&#xff0c;它依赖于具有多层结构的神经网络自动从数据中学习特征并完成任务&#xff0c;如图像识别&#xff0c;语音识别&#xff0c;自然语言处理等…

MSPM0开发学习笔记:二维云台画图(2025电赛 附源代码及引脚配置)

前言 今年的电赛&#xff08;2025&#xff09;&#xff0c;很多题都与云台相关&#xff0c;因此为备战电赛&#xff0c;博主这边也是准备了一个由两个42步进电机驱动的云台并提前进行调试&#xff0c;避免赛题出来之后手忙脚乱的&#xff0c;这边的两个42步进电机采用同一个驱…

借助 Wisdom SSH 的 AI 助手构建 Linux 开发环境

借助Wisdom SSH的AI助手构建Linux开发环境 在Linux系统的开发场景中&#xff0c;快速、准确地搭建开发环境至关重要。Wisdom SSH凭借其强大的AI助手&#xff0c;能极大简化这一过程&#xff0c;其官网为ssh.wisdomheart.cn。以下以在Ubuntu 22.04服务器上构建Python开发环境&am…

Python 程序设计讲义(44):组合数据类型——集合类型:创建集合

Python 程序设计讲义&#xff08;44&#xff09;&#xff1a;组合数据类型——集合类型&#xff1a;创建集合 目录Python 程序设计讲义&#xff08;44&#xff09;&#xff1a;组合数据类型——集合类型&#xff1a;创建集合一、集合的特征二、创建集合&#xff1a;使用set()函…