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 安装…...
抖音批量下载怎么做到又快又好?douyin-downloader帮你3步搞定
抖音批量下载怎么做到又快又好?douyin-downloader帮你3步搞定 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallbac…...
提升开发效率:使用快马平台自动化生成数据导出功能扩展模块
最近在给公司的后台管理系统扩展数据导出功能时,发现这类标准化功能模块的开发其实有很多重复劳动。经过实践,我发现用InsCode(快马)平台可以大幅提升这类功能扩展的效率,下面分享具体实现思路和优化点。 需求分析与功能拆解 数据导出功能看似…...
Linux进程信号详解(一):信号快速认识
一、信号快速认识信号(现实生活中):闹钟、红绿灯、上课铃声、狼烟、电话铃声、肚子叫、敲门声、脸色不好 ....1.1 生活中的信号 —— 快递的例子想象你网购了很多商品:你能识别快递:你知道快递员打电话时该怎么处理。即…...
FreeRTOS消息队列原理与实战应用指南
1. FreeRTOS消息队列核心概念解析消息队列作为FreeRTOS中最核心的通信机制之一,其设计理念源于操作系统中的生产者-消费者模型。在实际嵌入式开发中,我经常用它来解决任务间的数据传递问题。与裸机编程中的全局变量共享不同,消息队列通过内核…...
如何用Bubblewrap CLI创建你的第一个Trusted Web Activity项目
如何用Bubblewrap CLI创建你的第一个Trusted Web Activity项目 【免费下载链接】bubblewrap Bubblewrap is a Command Line Interface (CLI) that helps developers to create a Project for an Android application that launches an existing Progressive Web App (PWAs) usi…...
GeoIP2-CN项目的用户调研结果:需求分析与功能规划
GeoIP2-CN项目的用户调研结果:需求分析与功能规划 项目背景与调研目标 GeoIP2-CN项目作为一款小巧精悍、准确、实用的GeoIP2数据库,旨在解决传统GeoIP2数据库在中国大陆用户使用中存在的痛点。本次用户调研通过收集代理工具用户的实际使用反馈…...
民宿主必看!用这个小程序系统3天上线你的酒店预订平台(含WIFI管理+数据分析)
民宿数字化转型实战:3天打造智能预订平台全攻略 站在莫干山民宿的露台上,老板娘林姐望着满房的预订表却愁眉不展——电话接单混乱、WIFI密码总被问、客人反馈石沉大海...这场景是否似曾相识?如今,一套轻量级解决方案正在改变这个…...
别再乱写音视频了!FFmpeg的av_interleaved_write_frame到底怎么用才不卡顿?
深入解析FFmpeg中av_interleaved_write_frame的高效使用技巧 音视频开发中,最令人头疼的问题莫过于音画不同步和卡顿。我曾在一个直播推流项目中,连续三天被这个问题折磨得焦头烂额——画面流畅但声音总是延迟半秒出现,用户体验极差。最终发…...
基于Matlab的Dijkstra算法与蚁群优化算法路径规划
3基于matlab的Dijkstra和蚁群优化算法路径规划 Dijkstra算法研究的是从初始点到其他每一结点的最短路径,从而得到最短路径 蚂蚁会以较大的概率优先选择信息素浓度较高的路径, 并释放一定量的信息素, 以增强该条路径上的信息素浓度,…...
Topit:让Mac窗口像便利贴一样随手可贴,你的多任务效率神器
Topit:让Mac窗口像便利贴一样随手可贴,你的多任务效率神器 【免费下载链接】Topit Pin any window to the top of your screen / 在Mac上将你的任何窗口强制置顶 项目地址: https://gitcode.com/gh_mirrors/to/Topit 还在为Mac上频繁切换窗口而打…...
