Nginx 运维实战: 什么是反向代理,如何配置?

在互联网的庞大架构中,Nginx 作为一款高性能的 Web 服务器和反向代理服务器,发挥着至关重要的作用。其中,反向代理功能更是 Nginx 被广泛应用的核心原因之一。本文将深入探讨什么是反向代理,以及如何在 Nginx 中进行反向代理的配置。

一、反向代理的概念与原理

反向代理的定义

反向代理是指以代理服务器来接受 Internet 上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给 Internet 上请求连接的客户端,此时代理服务器对外就表现为一个服务器。

正向代理 vs 反向代理

我们先来简单对比一下正向代理与反向代理的区别:

类型谁隐藏使用场景示例

正向代理

客户端

用户访问外部资源时隐藏自己

翻墙代理、公司上网代理

反向代理

服务端

外部用户访问内部服务时隐藏后端

CDN、负载均衡、Web 服务器

反向代理的核心思想是:客户端不知道真正的服务器是谁,所有请求都先发给反向代理服务器,由它转发到后端真实服务器,并将结果返回给客户端。

反向代理的作用

  • 负载均衡:当有大量客户端请求到达时,反向代理服务器可以根据预设的算法,将请求分发到不同的后端服务器上,避免单个服务器负载过高,提高整个系统的处理能力和稳定性 。

  • 安全性提升:隐藏后端真实服务器的 IP 地址,使客户端无法直接与后端服务器通信,降低了后端服务器遭受攻击的风险。同时,反向代理服务器还可以对请求进行过滤和验证,拦截恶意请求,如 SQL 注入、跨站脚本攻击(XSS)等。

  • 缓存加速:反向代理服务器可以缓存后端服务器返回的静态资源(如图片、CSS、JavaScript 文件等)和动态内容。当有相同的请求再次到达时,直接从缓存中返回数据,减少了后端服务器的压力,也加快了客户端获取数据的速度,提升用户体验。

  • 服务高可用:当某一台后端服务器出现故障时,反向代理服务器可以自动将请求转发到其他正常运行的服务器上,保证服务的连续性,实现服务的高可用性。

  • 统一入口:对外提供一个统一的访问地址,便于管理。

反向代理的工作原理

客户端向反向代理服务器发送请求,反向代理服务器根据配置的规则(如请求的 URL、客户端 IP 地址等),将请求转发到合适的后端服务器。后端服务器处理请求后,将响应结果返回给反向代理服务器,反向代理服务器再将响应结果返回给客户端。整个过程中,客户端并不知道真正处理请求的后端服务器是谁,它只与反向代理服务器进行交互。

二、Nginx 反向代理的配置

基本反向代理配置

假设你有一个运行在服务器端口为 3000 的服务,现在想通过域名 http://api.example.com 访问这个服务。

server {listen 80;server_name api.example.com;location / {proxy_pass http://127.0.0.1:3000;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_set_header X-Forwarded-Proto $scheme;}
}

说明

  • listen 80:表示 Nginx 监听 80 端口。

  • server_name:指定域名,若没有域名或通过 IP 访问,可忽略此配置。

  • location / :定义请求的 URL 匹配规则,这里表示所有请求都将被代理到后端服务器。

  • proxy_pass:指定后端服务器的地址和端口。

  • proxy_set_header:设置请求头,用于传递原始信息给后端,例如:Host表示传递原始请求的域名,X-Real-IP表示获取客户端真实IP,X-Forwarded-For表示传递完整的代理路径,X-Forwarded-Proto表示传递后端请求使用的协议。

基于 URL 的反向代理配置

有时候,我们可能希望根据不同的 URL 将请求转发到不同的后端服务器。例如,将以/api开头的请求转发到一个 API 服务器,将其他请求转发到另一个 Web 服务器。

server {listen 80;server_name your_domain.com;location /api {proxy_pass http://api_server_ip:port;  # API服务器地址和端口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_set_header X-Forwarded-Proto $scheme;}location / {proxy_pass http://web_server_ip:port;  # Web服务器地址和端口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_set_header X-Forwarded-Proto $scheme;}
}

添加 SSL 支持(HTTPS)

如果你有 SSL 证书(比如 Let's Encrypt),可以添加 HTTPS 支持:

server {listen 443 ssl;server_name example.com;ssl_certificate /etc/nginx/ssl/example.com.crt;ssl_certificate_key /etc/nginx/ssl/example.com.key;location / {proxy_pass http://127.0.0.1:3000;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_set_header X-Forwarded-Proto $scheme;}
}# 强制跳转 HTTPS
server {listen 80;server_name example.com;return 301 https://$host$request_uri;
}

负载均衡配置

Nginx 支持多种负载均衡算法,如轮询(默认)、加权轮询、IP 哈希等。下面以加权轮询为例,介绍如何配置负载均衡。

upstream backend_servers {server 192.168.1.101 weight=3;  # 权重为3server 192.168.1.102 weight=1;  # 权重为1
}server {listen 80;server_name your_domain.com;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_set_header X-Forwarded-Proto $scheme;}
}

总结

反向代理是 Nginx 的重要功能之一,通过合理配置反向代理,我们可以实现负载均衡、提升安全性、加速服务响应等目标。在实际应用中,根据具体的业务需求和服务器架构,灵活运用 Nginx 的反向代理配置,能够打造出高性能、高可用的 Web 服务系统。

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

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

相关文章

短视第三套多功能主题3.0二开模板苹果CMS插件重构版

这款短视第三套多功能主题二开模板苹果CMS插件重构版源码,基于市面上现有的二开版本进行的重制修正更新。目前已经完美适配新版 4049 以上的苹果Cms系统,无需担心因系统版本问题导致的不兼容情况。​主题插件重构后支持一键启动插件自动安装模板&#xf…

详解力扣高频SQL50题之1148. 文章浏览 I【入门】

传送门:1148. 文章浏览 I 题目 Views 表: ---------------------- | Column Name | Type | ---------------------- | article_id | int | | author_id | int | | viewer_id | int | | view_date | date | ---------------------- 此表可能会存在重复…

内外网互传文件 安全、可控、便捷的跨网数据交换

内外网互传文件 安全、可控、便捷的跨网数据交换破解企业数字化痛点,重新定义文件传输标准在数字化转型浪潮中,企业面临着前所未有的挑战:内网系统需要严密防护,外网协作又要高效便民。如何在网络安全与业务效率之间找到完美平衡&…

性能监控装饰器-python

看项目时,发现一个性能监控装饰器,感觉挺有意思的。于是借鉴了他的思路,自己重新写了我认为更简洁的代码。作用:可以放在类上和方法上,如果放在类上,则监控所有方法。根据设置的阈值,判断方法执…

qt常用控件-05

文章目录qt常用控件-05LineEditTextEditcombo box结语很高兴和大家见面,给生活加点impetus!!开启今天的编程之路!! 今天我们进一步c11中常见的新增表达 作者:٩( ‘ω’ )و260 我的专栏:qt&am…

Python进阶知识之pandas库

目录 一、Series:一维带标签的数组 二、DataFrame:二维表格型数据结构 三、Series 的核心操作 四、 DataFrame 的核心操作 五、 索引的特殊用法 六、 loc 与 iloc:DataFrame 的高级查询 七、综合案例 一、Series:一维带标签…

【GIT】基础知识及基本应用

很高兴为您详细介绍Git的相关知识。Git是一个分布式版本控制系统,常用于软件开发中的代码管理和协作。以下是关于Git的一些基础知识:1. 安装和配置安装:Windows:可以从GitHub下载适用于Windows的安装包。MacOS:可以通过…

Maven Scope标签:解锁Java项目依赖管理的秘密武器

一、Maven 与依赖管理简介在 Java 项目开发的庞大体系中,Maven 堪称基石般的存在,发挥着极为关键的作用。它遵循 “约定优于配置” 的理念,让项目的构建过程变得规范有序、结构化且具备良好的重复性 。比如,它强制执行标准的项目结…

IP43半加固笔记本L156H

IP43半加固笔记本L156H 产品特性:● 标配Intel I7-7700HQ 4核8线程处理器 ● 操作系统支持Windows7/10 64bit / Li n u x ● DDR4 16G 高速内存 zui高支持64G ● 全高清显示面板15.6寸,1920X1080 ● 内置海德射频模块SMA接口 ● 工作温度:…

ZooKeeper 是什么?

ZooKeeper 是一个分布式协调服务,由 Apache 基金会开发,专为分布式系统设计。它提供了高可用、高性能、一致性的核心服务,帮助分布式应用解决诸如配置管理、命名服务、分布式锁、集群协调等问题。ZooKeeper 的核心特点:简单易用&a…

Java学习第六十三部分——K8s

目录 📫 一、关键概述 🔍 ​​二、定义起源​​ 🚀 ​​三、核心特点​​ 🏗️ ​​四、核心组件​​ 🧩 ​​五、资源对象​​ ⚡ ​​六、应用场景​​ 🧱 ​​七、Java与K8s 🛠️ ​…

【自用】JavaSE--阶段测试

考试题目第一题(10分)需求目前有100名囚犯,每个囚犯的编号是1-200之间的随机数。现在要求依次随机生成100名囚犯的编号(要求这些囚犯的编号是不能重复的),然后让他们依次站成一排。(注:位置是从…

Vulnhub Matrix-Breakout-2-Morpheus靶机攻略

1.下载靶机 靶机下载地址:https://download.vulnhub.com/matrix-breakout/matrix-breakout-2-morpheus.ova 下载后使用VM打开,后续选择安装地址开启就算是下载好了 2.主机发现 查看网络适配器模式(NET模式),找到NET…

OpenCV —— 绘制图形

😶‍🌫️😶‍🌫️😶‍🌫️😶‍🌫️Take your time ! 😶‍🌫️😶‍🌫️😶‍🌫️😶‍🌫️…

RHCE(4)

主:从:

网络安全作业三

<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>用户登录</title><link rel"style…

深入理解 ThreadLocal:从原理到最佳实践

&#x1f4dd; 前言&#xff1a;为什么你需要了解 ThreadLocal&#xff1f;在多线程并发编程中&#xff0c;线程安全始终是一个绕不开的话题。我们常常需要为每个线程维护一份独立的上下文数据&#xff0c;例如用户信息、事务 ID、日志追踪 ID 等。这些数据不能被多个线程共享&…

AD一张原理图分成多张原理图

先选中你要作为主级原理图的那张原理图&#xff0c;我这里是Sheet1,点击设计&#xff08;D&#xff09;&#xff0c;再点击create sheet symbol from sheet&#xff08;这个不能选错&#xff09;快捷键&#xff1a;DY弹窗中选择要加入的次级原理图左击鼠标放置重复上面的动作&a…

AI大模型资源

网址 https://sass.kupepoem.cn/ 登录-选择模型 打开上述网址后如下操作&#xff1a; 进入后&#xff0c;所有模型均可使用&#xff1a; o4-mini&#xff08;支持Deep Research深入研究&#xff09; 选择o4-mini模型 选择深度研究 要研究什么&#xff0c;对话直接输入即可。…

论文阅读--《Besting the Black-Box: Barrier Zones for Adversarial Example Defense》

好的&#xff0c;这是《Besting the Black-Box: Barrier Zones for Adversarial Example Defense》论文的中文翻译&#xff1a;[文件名称]: Besting_the_Black-Box_Barrier_Zones_for_Adversarial_Example_Defense.pdf [文件内容开始]第 1 页 收稿日期&#xff1a;2021年10月1…