用nginx搭建http透明代理

2023-05-16

背景

代理我们经常听,在技术层面我们谈论的代理往往是非透明代理,那么既然有非透明代理那就存在有透明代理。我们先看看什么是透明代理,引用百度百科的一句话可以描述明白 透明代理的意思是客户端根本不需要知道有代理服务器的存在。既然透明代理是感知不了代理的存在,那么非透明代理就是可以感知到代理的存在了,最简单的方式就是你要去访问网站A,在正常情况下,网站A看到访问是来自于你的终端的(比如源IP地址是你自己浏览器的),假如你的终端是通过代理来访问网站A的,在普通非透明代理情况下,网站A看到请求是来自于你的代理IP而看不到你这个终端,在透明代理情况下,网站A感知不到你和它之间中间有一层代理,网站A看到的请求是来自于你的终端地址。

除了这两种代理方式外,还有一种代理方式的区分(这种是另外一个层面的区分),正向代理和反向代理。正向代理引用百度百科描述如下 意思是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端才能使用正向代理。 那么反向代理呢,描述如下 在计算机网络中,反向代理是代理服务器的一种。服务器根据客户端的请求,从其关系的一组或多组后端服务器(如Web服务器)上获取资源,然后再将这些资源返回给客户端,客户端只会得知反向代理的IP地址,而不知道在代理服务器后面的服务器簇的存在。

我们今天要讨论的是用nginx来搭建http的透明正向代理,这种场景需求是非常常见的,比如我们希望接管当前某个网络环境下所有http访问(通俗来讲就是http劫持),所有对外http请求都转发到一台透明代理服务器,再经过这台代理服务器对外访问然后把数据返回给请求者,但是不希望请求者和外部服务器感知到中间有一层代理。

实战

nginx官方已经有一篇非常好的文章介绍使用nginx来搭建透明代理,这篇文章不仅仅描述http代理,还介绍了tcp、udp等代理方式,可以说是非常全面详细,我们只参考了里面有关透明http反向代理部分,有兴趣读者可以查阅相关连接地址如下 nginx官方透明代理教程
准备

操作系统这次用的是 CentOS7.4 64位

nginx版本用的是 nginx-1.14.2

环境及软件版本对方案搭建影响不太大,只要linux内核是3或者以上,nginx不要太旧即可。nginx我们选择的是普通的源码编译安装,过程比较简单不再列出,我们最终的安装目录是/opt

配置

配置是本文的核心关键,1是nginx的配置;2是iptable防火墙策略的配置,nginx配置核心关键内容如下:
server{

listen80; #既然是http代理,那么80端口是必须的

resolver 8.8.8.8; #用于解释对外访问的域名IP地址

location / {

    proxy_pass $scheme://$host$request_uri; #代理转发对应的服务器

    proxy_bind $remote_addr transparent; #这行很关键,启用透明代理

    proxy_set_header X-Real-IP $remote_addr; #这行是可选,把客户端IP头加到http自定义字段而已

    }

} 

除了上面的nginx,接下来另外一个重点就是iptable防火墙策略,要把http对外流量劫持到代理本机(首先在网络层面,要把需要劫持的流量路由到本代理设备),策略如下:
#添加一条策略,把目标是80端口的流量转发到本机的80端口,不加这条策略nginx是不会收到http请求数据的,服务器这个时候只会充当一台路由器的角色做数据转发而已

-A PREROUTING -i em1 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 80

#这条策略结合下面两条ip命令规则配合使用,目的是为了使外部http请求返回的数据可以正常地回复给请求者

-A PREROUTING -s 请求者IP范围段 -p tcp -m tcp --sport 80 -j MARK --set-xmark 0x1/0xffffffff

还需要2条ip指令跟上面的iptable策略配合使用,如下:

 ip rule add fwmark 1 lookup 100
 ip route add local 0.0.0.0/0 dev lo table 100

关于以上2条指令和iptable打标签,最终能够发挥出意料之外的效果,希望深知底层原理的读者可以回复小编,重重有赏。

在这里插入图片描述睿江云计算官网链接:https://www.eflycloud.com/home?from=RJ_0024

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用nginx搭建http透明代理 的相关文章

随机推荐

  • 湖南大学第十六届程序设计竞赛

    湖南大学第十六届程序设计竞赛 https ac nowcoder com acm contest 18196 description D 遇到这种题 xff0c 其实可以去大胆点找规律 正解是对于排位的期望 xff0c 我们只需要在意排的位
  • VS2010中CString Format出错

    VS2010中 Format 用法 xff1a 我在项目中需要实现一个字符串的转化 xff0c 代码如下 xff1a CString mess int x y x 61 640 y 61 480 mess Format 34 当前为 xff
  • 数据库MySQL安装方法:官网下载安装、国内镜像源安装

    一 官网下载安装 xff08 MySQL Download MySQL Yum Repository xff09 下载rpm包 xff0c 上传到虚拟机上 xff08 rz命令 xff09 root 64 localhost ls 在官网下
  • 输出函数print的用法

    print函数的作用 xff1a 可以将想要展示的内容输出在d IDLE上或者输出在文件中 print xff08 xff09 函数的使用 xff1a 1 print xff08 xff09 函数输出的内容可以是数字 2 print xff
  • 2021“MINIEYE杯”中国大学生算法设计超级联赛

    2021 MINIEYE杯 中国大学生算法设计超级联赛 1006 Given a sequence of integers of length n find the shortest consecutive subsequence witc
  • ac自动机

    https blog csdn net lleozhang article details 82782723 https www cnblogs com vongang archive 2012 07 24 2606494 html htt
  • 基环树 最大独立集

    基环树 xff0c 也是环套树 xff0c 简单地讲就是树上在加一条边 它形如一个环 xff0c 环上每个点都有一棵子树的形式 因此 xff0c 对基环树的处理大部分就是对树处理和对环处理 显然 xff0c 难度在于后者 在基环树中 xff
  • 有向图无向图找环

    https codeforces com contest 1607 problem F 练习题 xff08 有向图 题解 xff1a https www cnblogs com handwer p 15506706 html E8 B5 B
  • 《机器人知识结构图》思维导图,探索人工智能领域

    随着时代快速发展 xff0c 经济快速进步的趋势 xff0c 人工智能领域越来越被重视 xff0c 它是一门边缘学科 xff0c 属于自然科学和社会科学的交叉界限 实际应用的课程非常多 他的研究范畴又包括了自然语言处理 xff0c 知识表现
  • 微信小程序的两种视频录制方式

    曾有小伙伴询问小编能不能在小程序内实现视频录制 xff0c 今天小编就来给大家分享小程序视频录制两种方式 方法一 wx chooseVideo xff0c 这个api微信会在下方弹出选择视频和拍摄的两种选项 xff0c 因为这次主要是讲拍摄
  • 如何使用app原生上传替代uniapp的uploadfile接口

    uniapp简介 uniapp是近两年来比较火的号称开发者编写一套代码 xff0c 可发布到iOS Android Web xff08 响应式 xff09 以及各种小程序的一个平台 xff0c 它提供了各种丰富的API文档让开发者快速的完成
  • 如何用electron高度自定义制一个系统菜单栏?

    背景 最近在做一个实时聊天的PC客户端 xff0c 遇到这样一个任务 xff0c 在客户端接收到其他用户消息的时候要闪烁系统托盘图标 xff0c 并且在鼠标滑到系统托盘的时候显示未读消息的菜单栏 xff08 对 xff0c 就是类似QQ的消
  • OPENVIDU实现网络质量检测统计

    1 前言 在WebRTC中 xff0c 我们需要对当前的音视频情况进行监控 xff0c 便于对音视频质量有一个了解 xff0c 同时可以用来分析定位音视频卡顿模糊等问题 WebRTC提供了一个标准的解决方案 xff1a 标准详情 基于此标准
  • OPENVIDU实现同一用户同时发布多个流媒体

    1 前言 OPENVIDU这个库暂时是不支持在同一个会议室里面 xff0c 同一个用户同时发布多个媒体流的 但在实际工作中有这种需要 xff0c 比如用户A既要发布摄像机媒体流 xff0c 同时也要发布屏幕共享媒体流 下面介绍一种简单的方法
  • Softmax回归模型

    用到的数学概念补充 凸集 xff0c 凸函数 xff0c 黑塞矩阵 简介 节中 xff0c 我们介绍Softmax回归模型 xff0c 该模型是logistic回归模型在多分类问题上的推广 xff0c 在多分类问题中 xff0c 类标签 可
  • Ubuntu记录用户IP访问操作信息工具

    1 用脚本时刻记录用户IP访问操作信息工具 xff0c 用shell脚本去记录 2 每隔一天存放用户信息 xff0c 记录操作时间 xff0c 固定地方存放 脚本如下 在服务器环境变量中加入如下代码 vi etc profile bin b
  • webrtc系列之-像老鼠一样打洞

    众所周知 xff0c 本光头刚涉猎音视频不久 xff0c 所以很多东西都是边学边做的 xff0c 有说得不对的地方 xff0c 请各位多包涵 说穿透之前 xff0c 我们首先需要明白关于WEBRTC的一些概念 xff0c WEBRTC它是一
  • PHP的三种简单实用的传参方式

    首先声明 xff0c 本干货的观点仅代表个人观点 xff0c 拿出来和大家唠叨唠叨 最近在写代码的时候 xff0c 发现了一个有趣的事情 就是我创建了一个新的函数 xff0c 但是因为各种需求 xff0c 各种功能设计的原因 xff0c 函
  • apache rewrite(重定向)

    很多时候 xff0c 由于项目变更的需要 xff0c 我们会将一个网站的域名变更为另外一个域名 xff0c 又或者是一个地址转变为另外一个地址 而在项目里进行跳转并不是一个明智的选择 xff0c 这个时候我们就可以使用到apache的mod
  • 用nginx搭建http透明代理

    背景 代理我们经常听 xff0c 在技术层面我们谈论的代理往往是非透明代理 xff0c 那么既然有非透明代理那就存在有透明代理 我们先看看什么是透明代理 xff0c 引用百度百科的一句话可以描述明白 透明代理的意思是客户端根本不需要知道有代