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 安装…...

IDEA运行Tomcat出现乱码问题解决汇总
最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...

大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别
一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...
反向工程与模型迁移:打造未来商品详情API的可持续创新体系
在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...
三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点: 路径验证:确保相对路径.…...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...

Cinnamon修改面板小工具图标
Cinnamon开始菜单-CSDN博客 设置模块都是做好的,比GNOME简单得多! 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...

CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...
Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?
在大数据处理领域,Hive 作为 Hadoop 生态中重要的数据仓库工具,其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式,很多开发者常常陷入选择困境。本文将从底…...

用机器学习破解新能源领域的“弃风”难题
音乐发烧友深有体会,玩音乐的本质就是玩电网。火电声音偏暖,水电偏冷,风电偏空旷。至于太阳能发的电,则略显朦胧和单薄。 不知你是否有感觉,近两年家里的音响声音越来越冷,听起来越来越单薄? —…...