Nginx的正向代理与反向代理

news2024/11/17 0:01:11


你好呀,我是赵兴晨,文科程序员。

今天,我们将一起了解什么是Nginx的正向代理?什么是Nginx的反向代理?并实际动手实践。

以下内容都是满满的干货,绝对不容错过。我建议先收藏这篇文章,然后找一个安静的角落,慢慢品味和实践。

正向代理:连接互联网的桥梁

在局域网环境中,当需要访问外部互联网资源时,正向代理扮演着至关重要的角色。它像一座桥梁,连接着局域网内的客户端和广阔的互联网世界。

正向代理

正向代理(Forward Proxy)是一种代理服务器,它位于客户端和目标服务器之间。客户端通过代理服务器访问互联网,而不是直接连接到目标服务器。

让我们通过一个实际的例子来理解正向代理的作用

假设你在一个公司的局域网中工作,而公司内只有一台电脑可以访问外部网站。如果每个人都需要上网查找资料,显然不可能让所有人都排队使用这台电脑。这时,将这台电脑设置为代理服务器就是一个明智的选择。其他电脑通过这台代理服务器访问互联网,从而解决了访问限制的问题。

配置与优势

要实现正向代理,需要在代理服务器上进行相应的配置,包括设置监听端口、定义可访问的客户端等。配置完成后,所有局域网内的客户端都可以通过代理服务器安全、高效地访问互联网资源。

使用正向代理的好处包括

• 访问控制:管理员可以控制哪些用户或设备可以访问互联网,以及可以访问哪些网站。
• 缓存和加速:代理服务器可以缓存频繁访问的网页,减少重复的网络请求,提高访问速度。
• 隐私保护:客户端的真实IP地址被隐藏,增加了一定的匿名性。

反向代理:互联网的隐形守护者

在网络架构中,反向代理(Reverse Proxy)扮演着一个关键角色,它为客户端提供了一种无需直接与目标服务器交互的方式来访问资源。客户端对代理的存在毫无感知,这大大简化了访问过程。

反向代理

客户端通过反向代理服务器发送请求,而无需知晓目标服务器的具体位置或配置。反向代理服务器接收请求后,会选择一个合适的目标服务器来获取数据,然后将这些数据返回给客户端。在这个过程中,反向代理服务器对外表现为一个单一的服务器,隐藏了后端服务器的IP地址。

让我们通过一个实际的例子来理解反向代理的作用

想象一下,客户端想要访问一台运行在8001端口的Tomcat服务器。然而,客户端并不需要知道这个真实的端口号。Tomcat服务器为客户端提供了一个9001端口,客户端只需直接访问这个端口即可。至于9001端口如何转发请求到Tomcat服务器的8001端口,这是反向代理服务器的内部工作,客户端无需关心,也无需进行任何额外的配置。

反向代理的优势

使用反向代理的好处是显而易见的

• 简化客户端配置:客户端无需进行复杂的配置,即可直接访问服务。
• 提高安全性:隐藏了后端服务器的真实IP地址,增加了网络的安全性。
• 负载均衡:反向代理可以智能地将请求分发到多个后端服务器,实现负载均衡,提高系统的可用性和可靠性。
• 缓存静态内容:反向代理还可以缓存静态内容,减少对后端服务器的请求,提高访问速度。

正向代理和反向代理区别

正向代理服务器,架设在客户机与目标主机之间,只用于代理内部网络对互联网的连接请求,客户机必须指定代理服务器,并将本来要直接发送到Web服务器上的http请求发送到代理服务器中。

正向代理是客户端知道目标服务器在哪里,然后通过代理服务器去访问不能直接访问的目标服务器,而目标服务器并不知道客户端通过什么来访问的,即正向代理代理的是客户端。

反向代理服务器,架设在服务端,通过缓冲经常被请求的页面来缓解服务器的工作量,将客户机请求转发给内部网络上的目标服务器;并将从服务器上得到的结果返回给互联网上请求连接的客户端,此时代理服务器与目标主机一起对外表现为一个服务器。

反向代理中,外部网络对于内部网络具体的情况是不可见的,而代理服务器来代理内部网络来返回所要的数据,而服务端知道请求的来源以及数据。反向代理代理的是服务端。

正向代理和反向代理用途

正向代理

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

反向代理

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

Nginx 实现正向代理:配置与实践

在日常工作和网络配置中,我们通常更多地接触到 Nginx 的反向代理功能。然而,Nginx 同样可以作为正向代理使用,以便在客户端和目标服务器之间进行请求的转发。接下来,我将为你详细介绍 Nginx 正向代理的配置步骤。

正向代理的基本概念

正向代理作为客户端与互联网之间的中介,允许客户端通过代理服务器访问外部资源。客户端需要配置代理服务器的相关设置,以便通过代理进行网络访问。

Nginx 正向代理配置

为了实现 Nginx 的正向代理功能,除了配置转发 HTTP 80 端口的请求外,还需要配置 HTTPS 443 端口的转发。然而,Nginx 官方版本并不直接支持 HTTPS 请求的转发。

ngx_http_proxy_connect_module 模块

幸运的是,阿里云的一位技术专家开发了一个名为 ngx_http_proxy_connect_module 的 Nginx 模块,专门用于处理 HTTPS 请求的转发,并且已经开源。你可以在 https://github.com/chobits/ngx_http_proxy_connect_module 上找到这个模块。

1、安装Nginx1.20.1

以下步骤仅用于实验正向代理

实验环境 centos7.9 root用户操作

# 安装依赖
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.zip
tar -zxvf nginx-1.20.1.tar.gz
unzip v0.0.2.zip
mv 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_module
make && make install

# 设置开机自启
vi /etc/systemd/system/nginx.service

# 编辑内容如下
[Unit]
Description=nginx
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true

[Install]
WantedBy=multi-user.target

# 设置开机自启并启动
systemctl enable nginx --now

至此Nginx安装完毕,下面开始配置Nginx的正向代理。

2、修改Nginx配置文件并加载

#正向代理转发http请求
server {
    #指定DNS服务器IP地址 
    resolver 114.114.114.114;

    #监听80端口,http默认端口80
    listen 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默认端口443
    listen 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 -t

# 加载配置文件
systemctl 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

3、验证正向代理

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

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

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

在这里插入图片描述
在这里插入图片描述

windows10 谷歌浏览器 验证
在这里插入图片描述
在这里插入图片描述

windows按照上图配置完 就可以直接访问 www.baidu.com查资料了,如果无法访问,请检查nginx服务器,防火墙和selinux是否关闭。

好了以上就是今日的分享,回顾一下,今天收获了啥?

• Nginx的正向代理,反向代理
• 正向代理优势,反向代理的优势
• 正向代理和反向代理的区别
• 正向代理和反向代理的用途
• 如何安装Nginx 以及 Nginx正向代理的实践

实践是检验真理的唯一标准。阅读这篇文章可能只是让你在理论上掌握了知识,但真正的理解来自于亲自动手实践。因此,别忘了收藏这篇文章,并且关注我以便你在未来需要时能够轻松找到这些宝贵的资源

另外,如果你觉得今天的内容对你有帮助,不妨点击在看,分享给更多的朋友。一个小小的动作,可能会给他们带来巨大的帮助。

最后,我想说的是:点赞和分享不仅仅是一种美德,更是对未来美好生活的投资。愿每一个点在看的朋友,未来都能收获满满的幸福和成功!

你好,我是赵兴晨,一名文科程序员。我期待在文章下方看到你的留言,让我们一起交流,共同进步。

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

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

相关文章

Transformer+Classification学习笔记

论文名称&#xff1a;An Image is Worth 16x16 Words:Transformers for Image Recognition at Scale [2112.11010] MPViT: Multi-Path Vision Transformer for Dense Prediction (arxiv.org) 参考博客与视频&#xff1a; Vision Transformer 超详细解读 (原理分析代码解读) …

Jmeter 性能-需求分析业务/场景设计

1、性能测试需求分析与业务调研 性能测试的需求不能直接从产品经理那里获得&#xff0c;因为产品经理定义的性能需求比较抽象。 要落实到可执行的性能测试需求往往需要进一步分析和细化。这也是为什么获取具体的性能需求比较难的一个原因。 一般情况下&#xff0c;要知道性能…

(二刷)代码随想录第6天|242.有效的字母异位词、349.两个数组的交集

242.有效的字母异位词 242. 有效的字母异位词 - 力扣&#xff08;LeetCode&#xff09; 代码随想录 (programmercarl.com) 学透哈希表&#xff0c;数组使用有技巧&#xff01;Leetcode&#xff1a;242.有效的字母异位词_哔哩哔哩_bilibili 给定两个字符串 s 和 t &#xff…

基于大模型训练的数字识别

创作原因 现在写电赛题&#xff0c;题目有识别数字的要求。但使用设备openmv使用模板匹配的算法帧率很低&#xff0c;且识别效果不是很好&#xff0c;于是我们就想到了利用神经网络训练模型来识别数字 正文部分 内容介绍 本文内容是基于openmv使用Edge Impulse训练大模型。…

网络安全等级保护测评指标解读(2.0)

网络安全等级保护2.0测评指标解读&#xff1a; 1、物理和环境安全 2、网络和通信安全 3、设备和计算安全 4、应用和数据安全 5、安全策略和管理制度 6、安全管理机构和人员 7、安全建设管理 8、安全运维管理 软件资料清单列表部分文档&#xff1a; 工作安排任务书&#xff0c;…

【数据结构】红黑树(定义性质、插入、查找、删除)解析+完整代码

3.3 红黑树 3.3.1 定义和性质 为什么发明红黑树&#xff1f; 平衡二叉树和红黑树的时间复杂度相同&#xff0c;但是平衡二叉树的平衡特性容易被破坏&#xff0c;需要频繁调整树的形态。 红黑树RBT&#xff1a;插入/删除很多时候不会破坏红黑特性&#xff0c;无需频繁调整树的形…

Kimi智能助手:你的全天候AI伙伴

Kimi使用链接&#xff1a; https://kimi.moonshot.cn/ Kimi手机端下载链接&#xff1a; https://kimi.moonshot.cn/download/app?refchat 简介&#xff1a; Kimi AI 是由月之暗面科技有限公司&#xff08;Moonshot AI&#xff09;开发的一款人工智能助手&#xff0c;它具备多…

正运动技术与合作伙伴邀您共聚2024武汉光博会

■展会名称&#xff1a; 2024“中国光谷”光电子博览会暨论坛&#xff08;以下简称“武汉光博会”&#xff09; ■展会日期 2024年5月16日 - 18日 ■展馆地点 中国光谷科技会展中心A3馆 ■展位号 3A21 5月16至18日&#xff0c;中国光谷科技会展中心将举办第二十届武汉光…

nmap使用教程

nmap使用教程 一、nmap简介二、nmap常用命令2.1、target specification&#xff08;目标规范&#xff09;2.1.1、用法2.1.2、详情 2.2、HOST DISCOVERY&#xff08;主机发现&#xff09;2.2.1、用法2.2.2、详情 2.3、SCAN TECHNIQUES&#xff08;扫描技术&#xff09;2.4、PORT…

【Web】HNCTF 2024 题解(部分)

目录 Please_RCE_Me ezFlask GoJava ez_tp GPTS Please_RCE_Me <?php if($_GET[moran] flag){highlight_file(__FILE__);if(isset($_POST[task])&&isset($_POST[flag])){$str1 $_POST[task];$str2 $_POST[flag];if(preg_match(/system|eval|assert|call|…

从零开始开发企业培训APP:在线教育系统源码剖析

今天&#xff0c;小编将深入剖析企业培训APP的开发&#xff0c;从零开始为企业构建一个高效、实用的在线教育系统。 一、需求分析 1.主要功能需求 包括但不限于&#xff1a; -用户管理 -课程管理 -学习计划 -互动功能 -考核评估 -统计分析 二、技术选型 1.前端技术 …

PG数据文件和块管理与Oracle比较

之前有说过PG数据库中的对象oid与数据文件一一对应&#xff0c;创建的数据库如果没有指定表空间&#xff0c;则会默认放在默认表空间中&#xff0c;例如&#xff1a; 1.对象OID与数据文件对应关系 Oracle的逻辑与物理对应关系如下&#xff1a; 两种结果相比较而言&#xff1a; …

拯救者杯OPENAIGC开发者大赛城市巡回沙龙,苏州站报名开启!

由联想拯救者、AIGC开放社区、英特尔联合主办的“AI生成未来第二届拯救者杯OPENAIGC开发者大赛”自上线以来&#xff0c;吸引了广大开发者的热情参与。 为了向技术开发者、业务人员、高校学生、以及个体创业人员等参赛者们提供更充分的帮助与支持&#xff0c;AIGC开放社区特别…

RockChip Android8.1 EthernetService分析

一:概述 本篇文章将围绕RK Android8.1 SDK对Ethernet做一次框架分析,包含Framework层和APP层。 当前版本SDK默认只支持一路Ethernet,熟悉Ethernet工作流程后通过修改最终会在系统Setting以太网中呈现多路选项(可以有多种实现方式),博主通过增加ListPreference实现的效果…

C++设计模式|创建型 5.原型模式

1.什么是原型模式&#xff1f; 原型模式⼀种创建型设计模式&#xff0c;该模式的核⼼思想是基于现有的对象创建新的对象&#xff0c;⽽不是从头开始创建。 在原型模式中&#xff0c;通常有⼀个原型对象&#xff0c;它被⽤作创建新对象的模板。新对象通过复制原型对象的属性和状…

namenode启动失败 org.apache.hadoop.hdfs.server.common.InconsistentFSStateException:

小白的Hadoop学习笔记 2024/5/14 18:26 文章目录 问题解决报错浅浅分析一下core-ste.xml 问题 namenode启动失败 读日志 安装目录下 vim /usr/local/hadoop/logs/hadoop-tangseng-namenode-hadoop102.log2024-05-14 00:22:46,262 ERROR org.apache.hadoop.hdfs.server.namen…

开源可视化表单服务商:提升自主研发 助力流程化办公!

当前&#xff0c;做好流程化办公可以为企业实现提质增效的办公效果&#xff0c;助力企业进入数字化转型。作为开源可视化表单服务商&#xff0c;流辰信息坚持研发创新理念&#xff0c;努力提升自主研发能力&#xff0c;专为广大客户朋友提供集产品、框架定制、产品交付为一体的…

Java面试八股之Java中有哪些原子类,原理是什么

Java中有哪些原子类&#xff0c;原理是什么 AtomicInteger 和 AtomicLong&#xff1a; 用于对整数&#xff08;int&#xff09;和长整数&#xff08;long&#xff09;进行原子操作。 原理&#xff1a;它们内部封装了一个整型或长整型变量&#xff0c;并通过使用Unsafe类提供…

查找总价格为目标值的两个商品(双指针)

算法原理&#xff1a; 其实我们首先想到的方法肯定是暴力&#xff0c;两个for循环嵌套就能找到&#xff0c;但肯定会超时。 其实啊一切算法的总结都是在暴力的基础上进行的&#xff0c;算法其实就是对暴力进一步的优化。 定义两个指针&#xff0c;分别指向两端&#xff0c;然后…

单用户模式破解root密码

目录 一. 破解root密码 1. 查看操作系统版本 2.重启系统&#xff0c;进入grub菜单&#xff0c;选择要使用的内核&#xff0c;按e进入​编辑 3. 找到linux16那一行&#xff0c;把光标移动到最后&#xff0c;添加 init/bin/sh 然后ctrlx保存退出会自动进入系统 4. 进入系统后…