深入理解 Nginx 的正向代理和反向代理

在线工具站
  • 推荐一个程序员在线工具站:程序员常用工具(http://cxytools.com),有时间戳、JSON格式化、文本对比、HASH生成、UUID生成等常用工具,效率加倍嘎嘎好用。
程序员资料站
  • 推荐一个程序员编程资料站:程序员的成长之路(http://cxyroad.com),收录了一些列的技术教程、各大面试专题,还有常用开发工具的教程。
小报童专栏精选Top100
  • 推荐一个小报童专栏导航站:小报童精选Top100(http://xbt100.top),收录了生财有术项目精选、AI海外赚钱、纯银的产品分析等专栏,陆续会收录更多的专栏,欢迎体验~

Nginx 是一个高性能的 HTTP 服务器,同时也是一个反向代理服务器和邮件代理服务器。它因其高并发处理能力和灵活的配置选项而受到广泛欢迎。

什么是代理?

代理是一种网络服务,它允许客户端通过它来间接地与其他服务器通信。代理分为两种类型:正向代理和反向代理。

正向代理

正向代理位于客户端和服务器之间,代表客户端向服务器发送请求并将服务器的响应返回给客户端。正向代理通常用于以下场景:

  • 访问控制:通过代理服务器限制用户访问某些特定的网站。
  • 缓存:缓存客户端请求的数据,以减少带宽使用和提高响应速度。
  • 隐匿身份:隐藏客户端的真实 IP 地址,保护用户隐私。

反向代理

反向代理也位于客户端和服务器之间,但它代表服务器接受客户端的请求并将响应返回给客户端。反向代理通常用于以下场景:

  • 负载均衡:将请求分发到多个服务器上,分散负载,提高系统的可用性和性能。
  • 缓存:缓存服务器的响应数据,提高响应速度,减少后端服务器的负载。
  • 安全:隐藏后端服务器的真实 IP 地址,保护服务器不受外部攻击。

Nginx 的正向代理

Nginx 作为正向代理服务器,通常用于缓存和访问控制。配置一个正向代理相对简单,下面是一个基本的 Nginx 正向代理配置示例:

server {listen 8080;location / {proxy_pass http://$http_host$request_uri;proxy_set_header Host $http_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;# Enable cachingproxy_cache my_cache;proxy_cache_valid 200 302 10m;proxy_cache_valid 404 1m;}
}proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;

配置详解

  • listen 8080:监听 8080 端口,客户端将通过该端口访问代理服务器。
  • proxy_pass:将请求转发到目标服务器,$http_host$request_uri 是客户端请求的主机和 URI。
  • proxy_set_header:设置请求头,确保客户端的请求信息正确传递到目标服务器。
  • proxy_cache:启用缓存,my_cache 是缓存区的名称。
  • proxy_cache_valid:设置缓存的有效时间,不同的响应码可以有不同的缓存时间。
  • proxy_cache_path:配置缓存路径及相关参数。

启用和测试正向代理

将以上配置添加到 Nginx 配置文件中,并重启 Nginx 服务:

sudo nginx -s reload

配置好后,可以通过设置浏览器或其他客户端的代理服务器,使用 Nginx 作为正向代理。例如,配置浏览器的代理设置为 http://<your-nginx-server>:8080

Nginx 的反向代理

Nginx 作为反向代理服务器,常用于负载均衡和缓存。下面是一个基本的反向代理配置示例:

http {upstream backend {server backend1.example.com weight=5;server backend2.example.com;server backend3.example.com backup;}server {listen 80;location / {proxy_pass http://backend;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;# Enable cachingproxy_cache my_cache;proxy_cache_valid 200 302 10m;proxy_cache_valid 404 1m;}}proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;
}

配置详解

  • upstream backend:定义上游服务器组 backend,包含多个后端服务器。可以设置服务器权重和备份服务器。
  • listen 80:监听 80 端口,客户端将通过该端口访问反向代理服务器。
  • proxy_pass:将请求转发到上游服务器组 backend
  • proxy_set_header:设置请求头,确保客户端的请求信息正确传递到后端服务器。
  • proxy_cache:启用缓存,my_cache 是缓存区的名称。
  • proxy_cache_valid:设置缓存的有效时间,不同的响应码可以有不同的缓存时间。
  • proxy_cache_path:配置缓存路径及相关参数。

启用和测试反向代理

将以上配置添加到 Nginx 配置文件中,并重启 Nginx 服务:

sudo nginx -s reload

配置好后,可以通过访问 Nginx 服务器的 IP 或域名来测试反向代理。例如,访问 http://<your-nginx-server>,Nginx 将请求转发到后端服务器组 backend 中的服务器。

正向代理和反向代理的区别

虽然正向代理和反向代理的基本原理相同,都是在客户端和服务器之间充当中间人,但它们的作用和使用场景有所不同。

  • 方向不同:正向代理代表客户端向服务器发起请求,反向代理代表服务器接受客户端请求。
  • 用途不同:正向代理用于访问控制、缓存和隐匿身份;反向代理用于负载均衡、缓存和安全。
  • 客户端配置:使用正向代理时,客户端需要配置代理服务器;使用反向代理时,客户端无需做任何特殊配置。

结合使用正向代理和反向代理

在一些复杂的场景中,可以同时使用正向代理和反向代理。例如,一个企业可以使用正向代理来控制员工的外部网络访问,同时使用反向代理来处理外部用户对内部服务器的访问请求。

示例配置

假设企业内部网络通过正向代理访问外部网络,外部用户通过反向代理访问内部服务器,可以配置如下:

# 正向代理配置
server {listen 8080;location / {proxy_pass http://$http_host$request_uri;proxy_set_header Host $http_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;}
}# 反向代理配置
http {upstream internal_backend {server internal1.example.com;server internal2.example.com;}server {listen 80;location / {proxy_pass http://internal_backend;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;}}
}

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

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

相关文章

专利的黑白图片处理:

1&#xff0c;本来是彩色图片&#xff0c;首先就是使用滤镜处理成黑白的 2&#xff0c;插入word中的时候&#xff0c;直接讲图片的背景色设置成和word一样的颜色 如何在word文档里插入图片&#xff0c;让插入图片的背景颜色变成和word文档背景相同的白色&#xff1f;...急求啊…

HTML静态网页成品作业(HTML+CSS)——美食火锅介绍网页(1个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有1个页面。 二、作品演示 三、代…

微信对话生成器2.0版本

微信对话生成器2.0版&#xff0c;这是一款革命性的通讯辅助工具&#xff0c;在数字通信领域带来了新的创新浪潮。这一升级版的生成器不仅囊括了从基本的文字编辑、格式调整到语音转换的多种功能&#xff0c;更重要的是&#xff0c;它提供了模拟真实对话的能力&#xff0c;使得用…

使用 git 遇到权限错误,重新生成SSH密钥

如果在执行 git 相关的命令的时候遇到权限错误&#xff0c;可能是因为你之前使用了不同的用户名在本地生成了SSH密钥。你可以尝试以下步骤来解决这个问题&#xff1a; 打开终端&#xff0c;并执行以下命令来删除旧的SSH密钥文件&#xff1a; rm ~/.ssh/id_rsa rm ~/.ssh/id_rsa…

容器之对齐构件

代码&#xff1a; #include <gtk-2.0/gtk/gtk.h> #include <glib-2.0/glib.h> #include <gtk-2.0/gdk/gdkkeysyms.h> #include <stdio.h>int main(int argc, char *argv[]) {gtk_init(&argc, &argv);GtkWidget *window;window gtk_window_ne…

C++ 72 之 友元和类模版

#define _CRT_SECURE_NO_WARNINGS #include <iostream> using namespace std; #include <string>// 写法2&#xff1a; // template<class T1, class T2> // class Students12;// 要提前用到Students12&#xff0c;需要在前面先让编译器见过Students12才可…

汇聚荣做拼多多运营口碑怎么样?

拼多多作为国内领先的电商平台&#xff0c;其运营口碑一直是业界和消费者关注的焦点。汇聚荣作为拼多多的运营服务商&#xff0c;其服务质量直接影响到拼多多平台的用户体验和品牌形象。那么&#xff0c;汇聚荣做拼多多运营口碑怎么样呢? 一、服务响应速度 汇聚荣在服务响应速…

树莓派4B学习笔记11:PC端网线SSH连接树莓派_网线连接请求超时问题解决

今日继续学习树莓派4B 4G&#xff1a;&#xff08;Raspberry Pi&#xff0c;简称RPi或RasPi&#xff09; 本人所用树莓派4B 装载的系统与版本如下: 版本可用命令 (lsb_release -a) 查询: Opencv 版本是4.5.1&#xff1a; 今日学习使用网线连接树莓派&#xff0c;网线可以提供更…

vos3000外呼系统通话会话超时中断详解

在VOS3000中&#xff0c;通话会话超时中断可能由多种因素引起。这些因素包括网络问题、配置错误、硬件资源不足等。以下是一些可能导致通话会话超时中断的详细解释&#xff1a; 网络问题&#xff1a; 网络延迟和丢包&#xff1a;网络延迟或丢包会导致数据包在传输过程中被丢弃或…

邮件推送服务商有哪些核心功能?怎么选择?

邮件推送服务商支持哪些营销工具&#xff1f;推送性能如何评估&#xff1f; 邮件推送服务商的核心功能可以帮助企业更高效地管理和优化其电子邮件营销活动&#xff0c;从而提升客户参与度和转化率。AokSend将详细介绍邮件推送服务商的一些核心功能。 邮件推送服务商&#xff…

弹窗‘xlive.dll没有被指定在Windows’要怎么解决?教你4种修复xlive.dll的方法

大家在使用电脑期间是否曾遭遇过一个弹窗警告&#xff0c;“xlive.dll没有被指定在Windows”&#xff1f;假如你确实碰到过这样的问题&#xff0c;当时你是如何应对xlive.dll文件缺失的状况呢&#xff1f;对于那些还不清楚如何处理此问题的朋友们&#xff0c;接下来所述的几种方…

Go单测时的Parallel

在 Go 语言中&#xff0c;t.Parallel() 通常用于测试代码中&#xff0c;表示将当前的测试用例标记为可以并行执行。 当在测试函数中调用 t.Parallel() 后&#xff0c;测试框架会尝试在多个 goroutine 中并行地执行被标记的测试用例。 这可以显著提高测试的执行效率&#xff0c;…

用Python的Pygame包实现水果忍者小游戏

先上一下运行结果 长按鼠标左键出刀, 切割水果几分, 切割炸弹结束游戏, 漏掉的水果也会几分, 难度会随时间慢慢提高(水果的刷新频率变快) 初始化 帧率200帧/秒, 游戏窗口大小800600 # 游戏设置 pygame.init() FPS 200 fpsClock pygame.time.Clock() WIDTH, HEIGHT 800, 60…

比官方镜像体积还小的基于Anolis OS8.6的Python3.8.8的编译安装Dockerfile

本次编译安装解决了安装3.8.8编译安装过程中的所有报错&#xff0c;同时&#xff0c;OpenSSL升级至3.0.14、内置Git&#xff0c;支持IPv6&#xff0c;Python环境同时预安装httpx和boto3模块。 FROM openanolis/anolisos:8.6 as PYTHONARG PYTHON_VERSION"3.8.8" ARG…

Elasticsearch term 查询:精确值搜索

一、引言 Elasticsearch 是一个功能强大的搜索引擎&#xff0c;它支持全文搜索、结构化搜索等多种搜索方式。在结构化搜索中&#xff0c;term 查询是一种常用的查询方式&#xff0c;用于在索引中查找与指定值完全匹配的文档。本文将详细介绍 term 查询的工作原理、使用场景以及…

【FPGA】静态分析与时序约束(持续更新

Reference&#xff1a; V2静态时序分析与时序约束文档 入门 无时序约束场景中&#xff0c;普通图像显示不清晰&#xff0c;千兆网口接收Ethernet package 数据不正常&#xff0c;红外场景中图像显示不正常 Definition&#xff1a; 我们提出一些特定的时序要求&#xff08;或…

辅助构造函数相关学习以及php实现

https://mp.weixin.qq.com/s/J9hgLTxYi7ZJdFVG2VszQg 对这个文章进行摘要生成 ### 总体概要 文章阐述了在对象创建过程中&#xff0c;辅助构造函数&#xff08;或称为“多个”构造函数&#xff09;的重要性&#xff0c;它们为代码增加了功能性逻辑&#xff0c;并允许根据需求调…

Ada判别式记录的效率问题

在Ada语言的判别式记录类型&#xff08;discriminated record type&#xff09;中&#xff0c;包含了被称为判别器&#xff08;discriminant&#xff09;的元件&#xff08;component&#xff09;&#xff0c;以及依赖判别器的记录分量&#xff08;component&#xff09;。 依…

文章MSM_metagenomics(七):分组马赛克图

欢迎大家关注全网生信学习者系列&#xff1a; WX公zhong号&#xff1a;生信学习者Xiao hong书&#xff1a;生信学习者知hu&#xff1a;生信学习者CDSN&#xff1a;生信学习者2 介绍 本教程是使用一个Python脚本来绘制马赛克图&#xff0c;用于可视化两个变量的频率分布。 数…

我的Mac疯了!居然可以生成这样的奇葩AI图片!

在当今人工智能领域&#xff0c;midjourney无疑是生成图片的王者&#xff0c;但是苦于付费才能使用&#xff0c;今天我就给大家分享一下midjourney平替stable diffusion&#xff0c;实现本地生成不逊色于midjourney的图片 效果图 先上一个我自己生成的效果(就是在我的Mac上用C…