Nginx的正向代理与反向代理


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

今天,我们将一起了解什么是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默认端口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 -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:80curl https://www.baidu.com/ -v -x 127.0.0.1:443

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

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

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

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

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

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

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

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

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

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

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

相关文章

项目管理-案例重点知识(整合管理)

项目管理&#xff1a;每天进步一点点~ 活到老&#xff0c;学到老 ヾ(◍∇◍)&#xff89;&#xff9e; 何时学习都不晚&#xff0c;加油 一、整合管理 案例重点 重点内容&#xff1a; &#xff08;1&#xff09;项目章程内容和作用 &#xff08;2&#xff09;项目管理计划…

linux系统介绍和安装教程(含安装链接放在最下面了)

一、linux系统简介 在Linux和C语言的发展历程中&#xff0c;有几位关键人物为它们的诞生和推广做出了重要贡献。 首先&#xff0c;肯汤姆森&#xff08;Ken Thompson&#xff09;是一位在AT&T公司工作的员工&#xff0c;他不仅发明了B语言&#xff0c;还创造了Unix系统。…

python怎么读取xml

引入XML组件&#xff1a;import xml.dom.minidom。 创建一个xml文件&#xff0c;<?xml version"1.0" encoding"utf-8"?>。 加载读取XML文件&#xff0c;xml.dom.minidom.parse(abc.xml)&#xff0c;这是xml文件的对象。 获取XML文档对象&#xff0…

RT-DETR改进教程|加入SCNet中的SCConv[CVPR2020]自校准卷积模块!

⭐⭐ RT-DETR改进专栏|包含主干、模块、注意力机制、检测头等前沿创新 ⭐⭐ 一、 论文介绍 论文链接&#xff1a;http://mftp.mmcheng.net/Papers/20cvprSCNet.pdf 代码链接&#xff1a;https://gitcode.com/MCG-NKU/SCNet/ 文章摘要&#xff1a; CNN的最新进展主要致力于设计更…

微信小程序 - - - - - custom-tab-bar使用自定义tabbar

custom-tab-bar使用自定义tabbar 1. 创建custom-tab-bar组件2. 修改app.json3. tabbar对应页面调整 1. 创建custom-tab-bar组件 各个文件代码如下 /custom-tab-bar/data.js export default [{text: 流水笺,iconPath: /assets/icon/bill.png,selectedIconPath: /assets/icon/bi…

前端 performance api使用 —— mark、measure计算vue3页面echarts渲染时间

文章目录 ⭐前言&#x1f496;vue3系列文章 ⭐Performance api计算持续时间&#x1f496; mark用法&#x1f496; measure用法 ⭐计算echarts渲染的持续时间⭐结束 ⭐前言 大家好&#xff0c;我是yma16&#xff0c;本文分享关于 前端 performance api使用 —— mark、measure计…

Java网络编程之TCP协议核心机制(一)

目录 题外话 正题 TCP协议核心机制 1.确认应答机制 2.超时重传 3.连接管理 三次握手(建立数据连接)和四次挥手(断开连接) 三次握手 三次握手的意义 为什么不能是四次挥手和两次挥手呢??? 四次挥手(断开连接) 四次挥手的意义 四次挥手能变为三次挥手吗? 小结 题…

string功能介绍(普及版)

目录 1。初始化&#xff08;好几种方式&#xff09;&#xff0c;npos和string的使用说明 2。string的拷贝&#xff0c;隐式类型转换&#xff0c;[]&#xff0c;size&#xff0c;iterator&#xff0c;begin&#xff0c;end&#xff0c;reverse&#xff0c;reverse_iterator&am…

基于springboot实现的家具销售电商平台

开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&…

DELL服务器配置ILO(idrac)地址、修改管理员密码

服务器型号&#xff1a;DELL PowerEdge R630 1、重启服务器选择F2进入BIOS 2、重启服务器选择F2进入BIOS 3、选择“Network” 4、配置iDRAC的IP&#xff0c;掩码网关&#xff0c;DNS等信息 5、Esc返回&#xff0c;下滑选择“User Configuration” 6、配置iDRAC的用户名密码以及…

Spring Boot集成Ldap快速入门Demo

1.Ldap介绍 LDAP&#xff0c;Lightweight Directory Access Protocol&#xff0c;轻量级目录访问协议. LDAP是一种特殊的服务器&#xff0c;可以存储数据数据的存储是目录形式的&#xff0c;或者可以理解为树状结构&#xff08;一层套一层&#xff09;一般存储关于用户、用户…

WD—C++课前作业—30题

怎么会手和脚都在桌子上 目录 31&#xff0c;声明一个类 String,其数据成员为 char head[100],构造函数 String(char*Head)实现 head 的初始化&#xff0c;成员函数 void reverse()实现 head 内字符串的逆序存放&#xff0c;成员函数 void print()实现 head 内字符串的输出。…

01基础篇

1、初识 JVM 1.1 什么是 JVM JVM 全称是 Java Virtual Machine&#xff0c;中文译名 Java虚拟机。JVM 本质上是一个运行在计算机上的程序&#xff0c;他的职责是运行Java字节码文件。 Java源代码执行流程如下&#xff1a; 分为三个步骤&#xff1a; 编写Java源代码文件。使用…

Python轻量级Web框架Flask(14)—— 自己做Flask项目总结

0、前言&#xff1a; 本文意在记录自己在做毕业Flask项目开发时遇到的一些问题&#xff0c;并将问题解决方案记录下来&#xff0c;可做日后查询本文也会记录自己做FLask项目时实现的一些功能&#xff0c;作为开发工作的进程记录注意&#xff1a;用Flask开发的前提是已经设计好…

Java | Leetcode Java题解之第89题格雷编码

题目&#xff1a; 题解&#xff1a; class Solution {public List<Integer> grayCode(int n) {List<Integer> ret new ArrayList<Integer>();for (int i 0; i < 1 << n; i) {ret.add((i >> 1) ^ i);}return ret;} }

mongodb备份还原指南

MongoDB 提供的命令行实用程序mongodump和mongorestore创建备份和恢复数据的过程。 一、数据备份 mongorestore和mongodump实用程序可处理BSON数据转储&#xff0c;对于创建小型部署的备份非常有用。要实现弹性且无中断的备份&#xff0c;请将文件系统快照或区块级磁盘快照与…

串联所有单词的子串 ---- 滑动窗口

题目链接 题目: 分析: 我们上次做的题目, 是找到所有字符的异位词, 和这道题有些类似, 使用记录有效字符的个数找到子字符, 此题无非是把字符变成了字符串题目回顾 有一下几方面不同, 我们以示例1为例: 1. 哈希表 上次我们使用的是哈希数组, 因为数组的下标可以是字符, 现…

常类API(Math,System,Runtime)

1、Math 是帮助我们用于进行数学计算的工具类私有化构造方法&#xff0c;所有的方法都是静态的 方法名 说明public static int abs(int a) 获取参数绝对值 public static double ceil(int a)向上取整public static double floor(int a)向下取…

java项目之教学辅助平台(springboot+vue+mysql)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的教学辅助平台。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 教学辅助平台的主要使用者分…

如何在 Ubuntu 12.10 上使用 Python 创建 Nagios 插件

介绍 Python 是一种在 Linux 上默认可用的流行命令处理器。 我们之前已经介绍过如何在 Ubuntu 12.10 x64 上安装 Nagios 监控服务器。 这一次&#xff0c;我们将扩展这个想法&#xff0c;使用 Python 创建 Nagios 插件。 这些插件将在客户 VPS 上运行&#xff0c;并通过 NR…