构建高效网络:深入理解正向与反向代理的作用与配置

正向代理

如果把局域网外的互联网环境想象成一个巨大的资源库,则局域网中的客户端要访问互联网则需要通过代理服务器来访问,这种代理成为正向代理。

示例
用户想要访问 https://chensir.ink (目标服务器),但是用户端(浏览器)无法直接访问到,这时客户端需要提前配置好一个代理服务器,代理服务器可以访问 https://chensir.ink ,之后用户再通过代理服务器来访问目标服务器即可。
正向代理:无法直接连接到目标服务器,需要一个代理服务器帮忙实现,但要提前配置上代理服务器相关配置。
正向代理缺点:使用麻烦,用户需要提前自己配置好代理服务器所需要的各种配置参数和环境。

反向代理

客户端对代理是无感知的,因为客户端不需要配置任何参数就可以访问,客户端只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,再返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了正式服务器IP地址。
示例
客户端想要访问Tomcat服务器,Tomcat服务器真实的端口是8001,但客户端并不知道,Tomcat只为客户端提供了一个9001端口,所以客户端认为9001就是Tomcat端口,直接访问9001这个端口即可,至于9001端口怎样转到Tomcat真实端口8001是服务器内部工作分配的,客户端不需要知道,也不需要配置环境参数
反向代理:客户端想访问目标服务器,服务器直接提供了一个网址,直接访问即可,不用管其他配置
反向代理优点:方便快捷,用户无需配置,直接访问服务器一步到位

正向代理和反向代理区别

正向代理,架设在客户机与目标主机之间,只用于代理内部网络对互联网的连接请求,客户机必须指定代理服务器,并将本来要直接发送到Web服务器上的http请求发送到代理服务器中。
正向代理是客户端知道目标服务器在哪里,然后通过代理服务器去访问不能直接访问的目标服务器,而目标服务器并不知道客户端通过什么来访问的,即正向代理代理的是客户端。
反向代理服务器架设在服务端,通过缓冲经常被请求的页面来缓解服务器的工作量,将客户机请求转发给内部网络上的目标服务器;并将从服务器上得到的结果返回给互联网上请求连接的客户端,此时代理服务器与目标主机一起对外表现为一个服务器。
反向代理中,外部网络对于内部网络具体的情况是不可见的,而代理服务器来代理内部网络来返回所要的数据,而服务端知道请求的来源以及数据。反向代理代理的是服务端。

正向代理和反向代理用途

正向代理

  • 为在防火墙内的局域网客户端提供访问互联网的途径
  • 可以做缓存,加速访问资源
  • 对客户端访问授权,上网进行认证
  • 代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息

反向代理

  • 保证内网的安全,可以使用反向代理提供WAF功能,阻止web攻击大型网站,通常将反向代理作为公网访问地址,Web服务器是内网
  • 负载均衡,通过反向代理服务器来优化网站的负载,反向代理服务器根据每个服务器的性能来分配请求,保证服务器负载能在有效范围内

Nginx实现正向代理

nginx正向代理转发请求。除了要配置转发http 80端口还需要配置https 443端口,nginx官方并不支持直接转发https请求,但是阿里的一个大佬对nginx拓展了一个ngx_http_proxy_connect_module模块,并且开源 https://github.com/chobits/ngx_http_proxy_connect_module 不过维护的模块补丁也是有nginx版本限制的具体的到Git查看即可。

安装nginx 1.20.1

仅用于实验正向代理

# 安装依赖yum install -y wget unzip patch gcc pcre-devel zlib zlib-devel openssl openssl-devel curl# 下载nginx1.20.1源码包wget https://nginx.org/download/nginx-1.20.1.tar.gz# 下载ngx_http_proxy_connect_module模块wget https://github.com/chobits/ngx_http_proxy_connect_module/archive/refs/tags/v0.0.2.zip# 解压 nginx-1.20.1.tar.gz v0.0.2.ziptar -zxvf nginx-1.20.1.tar.gzunzip v0.0.2.zipmv ngx_http_proxy_connect_module-0.0.2/ ngx_http_proxy_connect_module# 安装cd nginx-1.20.1# 打补丁patch -p1 < /root/ngx_http_proxy_connect_module/patch/proxy_connect_rewrite_1018.patch# 添加模块并安装./configure --add-module=/root/ngx_http_proxy_connect_modulemake && make install# 设置开机自启vi /etc/systemd/system/nginx.service# 编辑内容如下[Unit]Description=nginxAfter=network.target[Service]Type=forkingExecStart=/usr/local/nginx/sbin/nginxExecReload=/usr/local/nginx/sbin/nginx -s reloadExecStop=/usr/local/nginx/sbin/nginx -s quitPrivateTmp=true[Install]WantedBy=multi-user.target# 设置开机自启并启动systemctl enable nginx --now

修改nginx配置

#正向代理转发http请求server {#指定DNS服务器IP地址 resolver 114.114.114.114;#监听80端口,http默认端口80listen 80;#服务器IP或域名server_name  localhost;#正向代理转发http请求location / {proxy_pass                 http://$host$request_uri;proxy_set_header           HOST $host;proxy_buffers              256 4k;proxy_max_temp_file_size   0k;proxy_connect_timeout      30;proxy_send_timeout         60;proxy_read_timeout         60;proxy_next_upstream error  timeout invalid_header http_502;}}#正向代理转发https请求server {#指定DNS服务器IP地址 resolver 114.114.114.114;#监听443端口,https默认端口443listen 443;#正向代理转发https请求proxy_connect;proxy_connect_allow            443 563;proxy_connect_connect_timeout  10s;proxy_connect_read_timeout     10s;proxy_connect_send_timeout     10s;location / {proxy_pass http://$host;proxy_set_header Host $host;}}

nginx配置语法检测并加载配置文件

/usr/local/nginx/sbin/nginx -tsystemctl reload nginx

DNS:

  • (国外)谷歌:8.8.8.8 developers.google.com
  • (国外)OpenDNS:208.67.222.222 signup.opendns.com
  • (国内)114:114.114.114.114 www.114dns.com
  • (国内)腾讯:119.29.29.29 www.dnspod.cn
  • (国内)阿里:223.5.5.5 alidns.com
  • (国内)百度:180.76.76.76 dudns.baidu.com

验证正向代理

Linux下验证代理服务器是否能正常转发http和https请求

curl http://www.baidu.com/ -v -x 127.0.0.1:80curl https://www.baidu.com/ -v -x 127.0.0.1:443



windows10 谷歌浏览器 验证


设置完 直接访问 www.baidu.com即可,如果无法访问 检查nginx服务器 防火墙和selinux是否关闭

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

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

相关文章

DataLoader 的 collate_fn 解释与示例教程

文章目录 导包数据Dataloadercollate_fn 导包 import torch from torch.utils.data import Dataset from typing import Any数据 class CustomDataset(Dataset):def __init__(self, length) -> None:super().__init__()self.length lengthdef __getitem__(self, indexNon…

请简述Vaadin框架的主要特点和优势。如何在项目中引入和使用Vaadin框架?

请简述Vaadin框架的主要特点和优势。 Vaadin框架的主要特点和优势主要体现在以下几个方面&#xff1a; 首先&#xff0c;Vaadin是一个基于GWT&#xff08;Google Web Toolkit&#xff09;的Java UI框架&#xff0c;这使得它能够快速构建高性能的Web应用程序。它使用Java语言编…

基于SSE长连接的智能客服问答系统技术方案及完整项目源码

文章目录 一、项目背景二、项目演示三、项目介绍B系统主要功能1. 注册登录重置密码2. 权限管理3. 项目管理4.客服管理 C系统主要功能1. 问答组件2. 主题色定制3. 类微信时间显示控件及智能tip提示4. 无障碍阅读4. 丰富的输入框组件5. 人工客服6. 聊天记录分表记录与查询 四、项…

PMIC芯片简介

PMIC&#xff08;Power Management Integrated Circuit&#xff09;&#xff0c;即电源管理集成电路&#xff0c;是一种专门用于管理和分配电子设备中电源的关键组件。它通过集成多种电源管理功能&#xff0c;提高了电源系统的效率和可靠性&#xff0c;同时减小了设备的尺寸和成…

Java垃圾回收机制(更新中...)

是什么&#xff1f; Java的垃圾回收机制&#xff08;Garbage Collection, GC&#xff09;是Java内存管理的核心部分&#xff0c;负责自动回收不再被程序使用的内存空间&#xff0c;从而防止内存泄漏和崩溃等问题。这是Java语言的一个重要特性&#xff0c;极大地简化了程序员的…

Scala大数据开发

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl Scala简述 在此&#xff0c;简要介绍 Scala 的基本信息和情况。 Scala释义 Scala 源自于英语单词scalable&#xff0c;表示可伸缩的、可扩展的含义。 Scala作者 Scala编…

K8s学习十(高级调度)

高级调度 CronJob计划任务 在 k8s 中周期性运行计划任务&#xff0c;与 linux 中的 crontab 相同注意点&#xff1a;CronJob 执行的时间是 controller-manager 的时间&#xff0c;所以一定要确保 controller-manager 时间是准确的cron表达式如下&#xff1a; 配置如下&#x…

Axios 使用教程

Axios 是什么? Axios 是一个基于 promise 网络请求库&#xff0c;作用于node.js 和浏览器中。 它是 isomorphic 的(即同一套代码可以运行在浏览器和node.js中)。在服务端它使用原生 node.js http 模块, 而在客户端 (浏览端) 则使用 XMLHttpRequests。 特性 从浏览器创建 XM…

【ZZULIOJ】1046: 奇数的乘积(Java)

目录 题目描述 输入 输出 样例输入 Copy 样例输出 Copy code 题目描述 给你n个整数&#xff0c;求他们中所有奇数的乘积。 输入 第一个数为n&#xff0c;表示本组数据一共有n个&#xff0c;接着是n个整数&#xff0c;你可以假设每组数据必定至少存在一个奇数。 输出…

五年经验,还不懂小表驱动大表

小表驱动大表&#xff0c;也就是说用小表的数据集驱动大表的数据集。假如有order和user两张表&#xff0c;其中order表有10000条数据&#xff0c;而user表有100条数据。 这时如果想查一下&#xff0c;所有有效的用户下过的订单列表。可以使用in关键字实现&#xff1a; select…

软件设计师——数据库

数据库 三级模式两级映像关系模型基本术语关系模型中的关系完整性约束 三级模式两级映像 概念模式&#xff08;也称模式&#xff09;对应基本表 外模式&#xff08;也称用户模式或子模式&#xff09;对应视图 内模式&#xff08;也称存储模式&#xff09;对应存储文件 两级映像…

Linux 5.10 Pstore 功能测试

目录 简介环境配置内核配置参考备注 简介 Pstore(Persistent store support)是用于系统发生oops或panic时&#xff0c;自动保存内核log buffer中的日志。随着功能不断完善&#xff0c;Duo S使用Linux 5.10已经支持保存console日志、ftrace消息和用户空间日志的收集&#xff0c…

Transformer架构顶层应用的基础知识

Transformer架构自从2017年被提出以来&#xff0c;已经在自然语言处理&#xff08;NLP&#xff09;和其他领域成为了一种革命性的模型结构。它不仅在各种NLP任务中取得了突破性的表现&#xff0c;也被扩展应用于图像处理、音频处理等领域。理解Transformer架构及其顶层应用的基…

Java基于SpringBoot+Vue的专家医院预约挂号系统,附源码

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

Android Framework学习笔记(2)----系统启动

Android系统的启动流程 启动过程中&#xff0c;用户可控部分是framework的init流程。init是系统中的第一个进程&#xff0c;其它进程都是它的子进程。 启动逻辑源码参照&#xff1a;system/core/init/main.cpp 关键调用顺序&#xff1a;main->FirstStageMain->SetupSel…

题目:宏#define命令练习(3)

题目&#xff1a;宏#define命令练习(3)    There is no nutrition in the blog content. After reading it, you will not only suffer from malnutrition, but also impotence. The blog content is all parallel goods. Those who are worried about being cheated should…

顺序表(1)——顺序表详解

什么是数据结构&#xff1f; 简单来说数据结构就是计算机储存&#xff0c;组织数据的方式&#xff0c;而数组就是最基础的数据结构。 那为什么会有数据结构的存在呢&#xff1f; 这需要将数据结构分成数据和结构两部分进行分析。 数据&#xff1a;我们在计算机屏幕上所看见的文…

【LeetCode: 572. 另一棵树的子树 + 二叉树 + dfs】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

spring事务那些事

实际工作中还会面临千奇百怪的问题&#xff0c;看下面返个例子&#xff08;注意MySql数据库测试&#xff09;&#xff1a; //1.hello1Service 调用 hello2Service Transactional(propagation Propagation.REQUIRED,rollbackFor Exception.class) public void doUpdate() {//…

深入解析:链游、DApp、公链、NFT与交易所开发的全景图

随着数字货币和区块链技术的迅速发展&#xff0c;链游开发、DApp开发、公链开发、NFT开发以及交易所开发等领域吸引了越来越多的关注。本文将以3000字的篇幅&#xff0c;对这些领域进行详细解析&#xff0c;探讨它们的意义、应用场景以及未来发展趋势。 链游开发&#xff08;Bl…