用nginx搭建http透明代理

背景

代理我们经常听,在技术层面我们谈论的代理往往是非透明代理,那么既然有非透明代理那就存在有透明代理。我们先看看什么是透明代理,引用百度百科的一句话可以描述明白 透明代理的意思是客户端根本不需要知道有代理服务器的存在。既然透明代理是感知不了代理的存在,那么非透明代理就是可以感知到代理的存在了,最简单的方式就是你要去访问网站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

原文地址:https://blog.51cto.com/13475644/2394716

时间: 2024-08-29 15:10:07

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

Nginx高可用反向代理搭建

Nginx高可用反向代理搭建 Nginx简介 Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器. Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本0.1.0发布于2004年10月4日.其将源代码以类BSD许可证的形式发布,因它的稳定性.丰富的功能集.示例配置文件和低系统资源的消耗而闻名. Nginx 可以在大多数 Unix like O

nginx正向代理,反向代理,透明代理(总结)

1正向代理 正向代理,也就是传说中的代理,他的工作原理就像一个跳板, 简单的说, 我是一个用户,我访问不了某网站,但是我能访问一个代理服务器 这个代理服务器呢,他能访问那个我不能访问的网站 于是我先连上代理服务器,告诉他我需要那个无法访问网站的内容 代理服务器去取回来,然后返回给我 从网站的角度,只在代理服务器来取内容的时候有一次记录 有时候并不知道是用户的请求,也隐藏了用户的资料,这取决于代理告不告诉网站 结论就是 正向代理 是一个位于客户端和原始服务器(origin server)之间的服务

【大型网站技术实践】初级篇:借助Nginx搭建反向代理服务器

一.反向代理:Web服务器的“经纪人” 1.1 反向代理初印象 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器. 从上图可以看出:反向代理服务器位于网站机房,代理网站Web服务器接收Http请求,对请求进行转发. 1.2 反向代理的作用 ①保护网站安全:任何来自Internet的请求都必须先经过代理服务器: ②通

Nginx搭建部署Web服务器并与NFS结合搭建负载均衡服务器

Nginx搭建部署Web服务器并与NFS结合搭建负载均衡服务器 一.搭建NginxWeb服务器     此种方式是用yum安装Nginx,为保证安装成功需在安装之前提前安装epel扩展源.     用yum安装Nginx     关闭系统防火墙           查看Nginx配置文件          安装完成后启动Nginx并查看其运行状态          然后在客户端浏览器里面输入Nginx服务器的IP地址即可验证Nginx工作正常      二.搭建NFS服务器     NFS:网络

图解正向代理、反向代理、透明代理

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://z00w00.blog.51cto.com/515114/1031287 套用古龙武侠小说套路来说,代理服务技术是一门很古老的技术,是在互联网早期出现就使用的技术.一般实现代理技术的方式就是在服务器上安装代理服务软件,让其成为一个代理服务器,从而实现代理技术.常用的代理技术分为正向代理.反向代理和透明代理.本文就是针对这三种代理来讲解一些基本原理和具体的适用范围,便于大家更深入理

图解正向代理、反向代理、透明代理(转)

转自:http://www.cnblogs.com/Anker/p/6056540.html 正向代理:代理服务器代替客户端想服务器发送请求 反向代理:客户直接访问反向代理服务器,反向代理服务器通过反向代理获取服务器内容,然后返回给客户端 透明代理:修改包,中转,透明 套用古龙武侠小说套路来说,代理服务技术是一门很古老的技术,是在互联网早期出现就使用的技术.一般实现代理技术的方式就是在服务器上安装代理服务软件,让其成为一个代理服务器,从而实现代理技术.常用的代理技术分为正向代理.反向代理和透明代

keepalived+nginx搭建高可用and负载均衡集群

keepalived+nginx搭建高可用and负载均衡集群 前言 因生产环境需要,现需要搭建一个前端为nginx的HA双向互备.后端为nginx代理的loadbalance负载均衡集群.nginx进程基于于Master+Slave(worker)多进程模型,自身具有非常稳定的子进程管理功能.在Master进程分配模式下,Master进程永远不进行业务处理,只是进行任务分发,从而达到Master进程的存活高可靠性,Slave(worker)进程所有的业务信号都由主进程发出,Slave(worke

Nginx搭建反向代理服务器过程详解 - Windows

本文主要是Nginx做一个简单的反向服务器代理和静态文件缓存. 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器 我们就开始动手吧. 1. Vistudio 创建两个简单的 WebApplication (Web Forms),一个叫WebApplication1,一个叫 WebApplication2. 为了区别

Squid透明代理+ACL访问控制+日志分析

防伪码:仰天大笑出门去,我辈岂是蓬蒿人 第一章 Squid透明代理+ACL访问控制+日志分析 前言:搭建代理服务器可以提高上网打开网页的速度,可以对非法网站进行屏蔽,限制文件下载,以及查看员工访问internet的情况,包括上网的地址,用户,时间等,是企业网络管理的常用手段. 代理服务器分为传统代理和透明代理,传统代理适用于浏览internet,需要在浏览器上手工指定服务器地址和端口,不是很方便,但是可以隐藏本机真实的ip地址,而且为下载工具使用多个代理可以规避服务器的并发连接显示.透明代理适用