Nginx反向代理配置
一、介绍
Nginx 的反向代理功能在现代网络架构中扮演着至关重要的角色。首先,它充当了客户端与后端服务器之间的中介。当客户端发送请求时,这些请求先到达 Nginx 服务器,Nginx 会根据预先设定的规则和配置,将请求准确地转发到相应的后端服务器。
这种机制带来了诸多优势。一方面,它有效地隐藏了后端服务器的真实网络结构和细节,增强了系统的安全性和稳定性。另一方面,它为实现负载均衡提供了便利,能够智能地将大量请求分配到不同的后端服务器上,避免单个服务器过载,从而确保整个系统高效运行。
在配置反向代理时,Nginx 提供了丰富且灵活的选项。可以轻松定义不同的代理规则,针对不同的域名、路径或其他条件进行精准的请求转发。同时,还可以进行各种优化设置,如缓存、压缩等,以提升数据传输效率和响应速度。
此外,Nginx 的反向代理还具备高度的可扩展性和适应性。无论是应对不断增长的流量,还是整合新的后端服务,都能够通过简单的配置调整来实现,无需对整个系统架构进行大规模改动。
总之,Nginx 的反向代理是一项强大而实用的技术,为构建高效、可靠和可扩展的网络应用提供了坚实的基础。它在众多场景中发挥着关键作用,助力企业和开发者打造出更优质的网络服务。
关于 Nginx的安装,可以参考:使用Docker安装Nginx
二、反向代理的应用场景
负载均衡
将请求分发到多个后端服务器上,提高系统的处理能力。例如,将用户的请求均匀地分配到多个 Web 服务器上。
隐藏真实服务器
客户端只与Nginx交互,不知道后端服务器的具体信息。比如,对外只暴露Nginx的地址,保护后端服务器的安全。
缓存静态资源
可以缓存一些静态文件,减少后端服务器的压力。比如,缓存图片、CSS、JS 等文件。
SSL 终止
在 Nginx 上处理 SSL 加密和解密,减轻后端服务器的负担。
多站点部署
通过 Nginx 反向代理可以实现一个服务器上部署多个网站。
灰度发布
可以逐步将流量切换到新的版本或服务器上。
故障转移
当某台后端服务器出现故障时,自动将请求切换到其他健康的服务器上。
三、反向代理配置
基于域名的反向代理
假设我们有两个域名,example1.com和example2.com。
Nginx 配置如下:
server {listen 80;server_name example1.com;location / {proxy_pass http://backend1.example.com;}
}server {listen 80;server_name example2.com;location / {proxy_pass http://backend2.example.com;}
}
当用户访问 example1.com 时,Nginx 会将请求反向代理到 http://backend1.example.com;而当访问 example2.com 时,请求则会被转发到 http://backend2.example.com 。
基于路径的反向代理
假设我们要将以 /api 开头的请求转发到后端服务 http://backend-api.example.com,其他请求保持不变。
Nginx 配置如下:
server {listen 80;server_name localhost;location / {root html;index index.html index.htm;}location /api {proxy_pass http://backend-api.example.com;}}
当用户访问比如 /api/users 时,Nginx 就会把该请求反向代理到 http://backend-api.example.com ,而访问其他路径如 /home 等就按常规处理。
基于负载均衡的反向代理
假设我们有三个后端服务器,分别是 backend1.example.com、backend2.example.com 和 backend3.example.com。
Nginx 配置如下:
http {upstream my_backends {server backend1.example.com;server backend2.example.com;server backend3.example.com;}server {listen 80;location / {proxy_pass http://my_backends;}}
}
在这个例子中,Nginx 会将请求按照一定的策略(通常是轮询)均衡地分发到这三个后端服务器上。
关于 Nginx负载均衡,大家可以参考:Nginx负载均衡配置
动静分离型反向代理
动静分离型反向代理是将动态内容和静态内容分别处理的一种反向代理方式,将静态资源(如图片、CSS、JavaScript 文件等)和动态内容(如由特定程序处理的请求)分别路由到不同的后端处理。
假设我们有一个前端服务器(Nginx)和两个后端服务器(Server1 和 Server2),其中 Server1 处理动态请求,Server2 处理静态请求。
在 Nginx 的配置文件中,定义一个上游服务器池,包含 Server1 和 Server2:
upstream servers {server Server1_IP:Server1_Port;server Server2_IP:Server2_Port;
}
配置动静分离的规则。对于静态资源(如图片、CSS、JavaScript 文件等),使用 proxy_pass 将请求转发到 Server2;对于动态请求(如 HTML、JSP、PHP 文件等),使用 proxy_pass 将请求转发到 Server1:
location /static {proxy_pass http://Server2_IP:Server2_Port;
}location / {proxy_pass http://Server1_IP:Server1_Port;
}
Server1:配置为处理动态请求的服务器,例如运行 Web 应用程序。
Server2:配置为处理静态请求的服务器,例如存储图片、CSS、JavaScript 文件等静态资源。
通过以上配置,Nginx 会根据请求的路径将动态请求转发到 Server1,将静态请求转发到 Server2。
四、location中关于反向代理的参数
proxy_pass
用于指定反向代理的目标服务器地址,可以是域名或 IP 地址。例如:proxy_pass http://backend_server。
proxy_pass http://backend_server
proxy_set_header
用于设置 HTTP 请求头,可将客户端的信息传递给后端服务器。例如:proxy_set_header Host $host。
roxy_set_header Host $host
proxy_connect_timeout
设置连接目标服务器的超时时间。
proxy_connect_timeout 10s
proxy_read_timeout
设置读取从目标服务器返回数据的超时时间。
proxy_read_timeout 30s
proxy_send_timeout
设置向目标服务器发送请求的超时时间。
proxy_send_timeout 20s
proxy_cache
用于设置反向代理缓存,提高响应速度。
proxy_cache mycache
proxy_cache_valid
配置缓存的有效时间。
proxy_cache_valid 200 30d
proxy_cache_bypass
指定不使用缓存的条件。
proxy_cache_bypass $cookie_user
proxy_redirect
控制是否自动重定向请求。
roxy_redirect default
proxy_set_header
可以设置更多的 HTTP 请求头。
roxy_set_header X-Forwarded-For $remote_addr
proxy_ssl_certificate 和 proxy_ssl_password
如果目标服务器使用 HTTPS,需要配置这些参数来进行加密连接。
proxy_ssl_certificate /path/to/certificate.pem
proxy_ssl_password password
相关文章:

Nginx反向代理配置
一、介绍 Nginx 的反向代理功能在现代网络架构中扮演着至关重要的角色。首先,它充当了客户端与后端服务器之间的中介。当客户端发送请求时,这些请求先到达 Nginx 服务器,Nginx 会根据预先设定的规则和配置,将请求准确地转发到相应…...

突破编程界限:探索AI编程新境界
文章目录 一、AI编程助手1.1 Baidu Comate智能代码助手1.2 阿里云 通义灵码 二、场景需求三、体验步骤3.1 官网下载3.2 手动下载 四、试用感受4.1 提示4.2 注释生成代码4.3 代码生成4.4 选中生成注释4.5 查看变更&新建文件4.6 调优建议4.7 插件使用 五、结尾推荐 一、AI编程…...

C语言(指针)2
Hi~!这里是奋斗的小羊,很荣幸各位能阅读我的文章,诚请评论指点,关注收藏,欢迎欢迎~~ 💥个人主页:小羊在奋斗 💥所属专栏:C语言 本系列文章为个人学习笔记&#x…...

go学习笔记
1基础搭建 1.1,安装vscode https://code.visualstudio.com/download 64位 1.2,Windows 下搭建Go 开发环境-安装和配置 SDK SDK 的全称(Software Development Kit 软件开发工具包) Go 语言的官网为:golang.org , 因为各种原因,可…...

MacApp自动化测试之Automator初体验
今天我们继续讲Automator的使用。 初体验 启动Automator程序,选择【工作流程】类型。从资源库区域依次将获取指定的URL、从网页中获得文本、新建文本文件三个操作拖进工作流创建区域。 然后修改内容,将获取指定的URL操作中的URL替换成https://www.cnb…...
Vue学习v-html
Vue学习v-html 一、前言1、基本用法2、注意事项 二、总结 一、前言 学习 Vue.js 中的 v-html 指令意味着你想要在你的应用程序中动态地渲染 HTML。这个指令允许你将数据中包含的 HTML 代码直接插入到你的模板中,而不是将其作为纯文本处理。虽然这个功能非常强大&am…...
C++并发:锁
一、前言 C中的锁和同步原语的多样化选择使得程序员可以根据具体的线程和数据保护需求来选择最合适的工具。这些工具的正确使用可以大大提高程序的稳定性和性能,本文讨论了部分锁。 二、std::lock 在C中,std::lock 是一个用于一次性锁定两个或多个互斥…...
Git | git log 和 git status 的区别
如是我闻: git log和git status是Git中的两个非常有用的命令,它们用于不同的目的,并提供不同类型的信息。 git log git log命令用于显示一个或多个分支的提交历史记录。这个命令会列出提交历史,包括每次提交的SHA-1哈希值、提交…...

Django 4.x 智能分页get_elided_page_range
Django智能分页 分页效果 第1页的效果 第10页的效果 带输入框的效果 主要函数 # 参数解释 # number: 当前页码,默认:1 # on_each_side:当前页码前后显示几页,默认:3 # on_ends:首尾固定显示几页&#…...

java-spring 09 下.populateBean (方法成员变量的注入@Autowird,@Resource)
1.在populateBean 方法中的一部分:用于Autowird,Resource注入 // 后处理器已经初始化boolean hasInstAwareBpps hasInstantiationAwareBeanPostProcessors();// 需要依赖检查boolean needsDepCheck (mbd.getDependencyCheck() ! AbstractBeanDefinitio…...

赛氪网携手众机构助力第七届京津冀生态修复实践论坛圆满落幕
近日,由北京生态修复学会联合工业固废网、中国老科协国土资源分会共同主办,赛氪网作为支持单位的第七届京津冀生态修复实践论坛在北京温德姆酒店圆满落幕。本次论坛汇聚了众多行业专家、学者以及企业代表,共同探讨生态修复领域的新技术、新方…...

Naive RAG 、Advanced RAG 和 Modular RAG 简介
简介: RAG(Retrieval-Augmented Generation)系统是一种结合了检索(Retrieval)和生成(Generation)的机制,用于提高大型语言模型(LLMs)在特定任务上的表现。随…...

Python高级编程-DJango2
Python高级编程-DJango2 没有清醒的头脑,再快的脚步也会走歪;没有谨慎的步伐,再平的道路也会跌倒。 目录 Python高级编程-DJango2 1.显示基本网页 2.输入框的形式: 1)文本输入框 2)单选框 3ÿ…...
bash脚本 报错:/bin/bash^M:解释器错误: 没有那个文件或目录
bash脚本 报错:/bin/bash^M:解释器错误: 没有那个文件或目录 出现这个问题是因为该脚本文件在windows下编辑过 在windows下,每一行的结尾是\n\r,而在linux下文件的结尾是\n,那么你在windows下编辑过的文件在linux下打…...

win10专业版远程桌面连接不上,win10专业版远程桌面连接不上常见原因与解决方法
Win10专业版远程桌面连接功能是一项非常实用的工具,它允许用户远程访问和操作另一台计算机。然而,有时在尝试进行远程桌面连接时,可能会遇到连接不上的情况。本文将分析导致这一问题的常见原因,并提供相应的解决方法。 一、常见原…...
前端 日期 new Date 少0 转换成 yyyy-MM-dd js vue
在console控制台直接输出new Date(),是这样: Fri May 10 2024 23:36:06 GMT0800 (中国标准时间) 输出new Date().toLocaleString(),是这样: 2024/5/10 23:36:06 输出new Date().toISOString(),是这样: …...

Linux中的磁盘分析工具ncdu
2024年5月14日,周二上午 概述 ncdu 是一个基于文本的用户界面磁盘使用情况分析工具。它可以在终端中快速扫描目录,并统计该目录下的文件和文件夹的磁盘使用情况,以交互友好的方式呈现给用户。 安装 在 Debian/Ubuntu 系统下,可…...

Angular入门
Angular版本:Angular 版本演进史概述-天翼云开发者社区 - 天翼云 安装nodejs:Node.js安装与配置环境 v20.13.1(LTS)-CSDN博客 Angular CLI是啥 Angular CLI 是一个命令行接口(Angular Command Line Interface),是开发 Angular 应用的最快、最…...

Java进阶11 IO流、功能流
Java进阶11 IO流-功能流 一、字符缓冲流 字符缓冲流在源代码中内置了字符数组,可以提高读写效率 1、构造方法 方法说明BufferedReader(new FileReader(文件路径))对传入的字符输入流进行包装BufferedWriter(new FileWriter(文件路径))对传入的字符输出流进行包装…...

windows 安装 Conda
1 Conda简介 Conda 是一个开源的软件包管理系统和环境管理系统,用于安装多个版本的软件包及其依赖关系,并在它们之间轻松切换。Conda 是为 Python 程序创建的,适用于 Linux,OS X 和Windows,也可以打包和分发其他软件。一般用conda来维护多个python版本。 2 安装…...

C++初阶-list的底层
目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...
java 实现excel文件转pdf | 无水印 | 无限制
文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...

Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...

使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...

使用LangGraph和LangSmith构建多智能体人工智能系统
现在,通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战,比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...
C++.OpenGL (20/64)混合(Blending)
混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...