快速掌握Go语言正/反向代理

先重温一下什么叫反向代理,正向代理。

所谓正向,反向代理取决于代理的是出站请求,还是入站请求。

正向代理: 代理的出站请求, 客户端能感知到代理程序,架构上距离客户端更近。
反向代理: 代理的是入站请求,客户端认为代理程序就是服务器,客户端感知不到代理逻辑,架构上距离服务端更近。

前几天利用golang实现了反向代理程序,引出了Host请求头在反代中的关键作用。

对于proxy.com的请求,都被透明无感代理到A.com

package main

import (
	"fmt"
	"log"
	"net/http"
	"net/http/httputil"
)

func ReverseProxyHandler(w http.ResponseWriter, r *http.Request) {
	fmt.Println("receive a request from:", r.RemoteAddr, r.Header)

	target := "www.baidu.com"
	director := func(req *http.Request) {
		req.URL.Scheme = "https"
		req.URL.Host = target
		req.Host = target
	}
	proxy := &httputil.ReverseProxy{Director: director}
	proxy.ServeHTTP(w, r)
}

func main() {
	fmt.Printf("Starting server at port 8080\n")
	if err := http.ListenAndServe(":8080", http.HandlerFunc(ReverseProxyHandler)); err != nil {
		log.Fatal(err)
	}
}

这几天刚好遇到了一个正常代理的case, 简单记录一下。

package main

import (
	"fmt"
	"log"
	"net/http"
	"net/http/httputil"
)

func ProxyHandler(w http.ResponseWriter, r *http.Request) {
	fmt.Printf("receive a request from {0}  {1}: \n", r.RemoteAddr, r.Header)
	if r.Host != "localhost:8080" {
		director := func(req *http.Request) {
			req.URL.Scheme = "http"
			req.URL.Host = r.Host
			req.Host = r.Host
		}
		proxy := &httputil.ReverseProxy{Director: director}
		proxy.ServeHTTP(w, r)
	} else {
		http.NotFound(w, r)
	}
}

func main() {
	if err := http.ListenAndServe(":8080", http.HandlerFunc(ProxyHandler)); err != nil {
		log.Fatal(err)
	}
}

其中要注意的就是,正向代理式要规避死循环代理。

使用该服务作为代理程序,将可以出站访问任何地址。

使用时,针对httpclient设置proxy

//adding the proxy settings to the Transport object
	transport := &http.Transport{
		Proxy: http.ProxyURL(proxyURL),
	}

	//adding the Transport object to the http Client
	client := &http.Client{
		Transport: transport,
	}

下面使用curl指令演示(-x 后接代理地址)

curl -x 127.0.0.1:8080 www.baidu.com

GO快闪#

本文总结了go语言正反向代理的姿势。

到此这篇关于快速掌握Go语言正/反向代理的文章就介绍到这了,更多相关Go语言正/反向代理内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 1行Go代码实现反向代理的示例

    暂且放下你的编程语言来瞻仰下我所见过的最棒的标准库. 为项目选择编程语言和挑选你最爱的球队不一样.应该从实用主义出发,根据特定的工作选择合适的工具. 在这篇文章中我会告诉你从何时开始并且为什么我认为 Go 语言如此闪耀,具体来说是它的标准库对于基本的网络编程来说显得非常稳固.更具体一点,我们将要编写一个反向代理程序. Go 为此提供了很多,但真正支撑起它的在于这些低级的网络管道任务,没有更好的语言了. 反向代理是什么? 有个很棒的说法是流量转发 .我获取到客户端来的请求,将它发往另一个服务器,从

  • Golang项目搭配nginx部署反向代理负载均衡讲解

    目录 部署Go语言项目 独立部署 编译 nohup supervisor 搭配nginx部署 正向代理与反向代理 使用yum安装nginx Nginx配置文件 Nginx常用命令 Nginx反向代理部署,无负载均衡 Nginx反向代理部署,有负载均衡 Nginx分离动静态文件请求 前后端分开部署 允许所有请求跨域 部署Go语言项目 本文以部署 Go Web 程序为例,介绍了在 CentOS7 服务器上部署 Go 语言程序的若干方法. 独立部署 Go 语言支持跨平台交叉编译,也就是说我们可以在 W

  • Nginx 配置反向代理使用 Google fonts 字体并开启 HTTP2/SSL 支持

    由于博客主题使用了 Google fonts PT Serif 字体,国内只能通过中科大的代理来使用 Google fonts 字体.然而最近发现其速度不稳定,响应时间有时候甚至超过 600ms.刚好因为自己有 vultr 的 VPS(带小尾巴) 就自己动手搭了个来用 VPS 环境如下: Ubuntu 14.04 Nginx 1.12.0 (最新版各别配置与之前不一样) Openssl 1.0.2j (新版 Nginx 开启 http2 需要的最低 openssl 版本) 重新编译安装 Ngin

  • 使用Nginx反向代理到go-fastdfs的方法示例

    背景 go-fastdfs是支持http协议的一款分布式文件系统,在一般的项目中,很少是直接将文件系统的地址暴露出来的,大多数都会通过nginx等软件进行反代过去,由于我司的业务和网络环境场景相对特殊,由公网部分(公有云)和内网部分(私有云)组成的混合云网络体系,公有云主要就是作为一个出口和入口以及运行一些审计认证等应用,对上游请求进行处理,从而减少私有云的处理次数,提升性能.那么也正是因为这样,在公网的环境下,要访问到私有云提供的服务则必须使用反向代理.同样道理,对于文件系统的访问也如此,如何

  • golang 如何实现HTTP代理和反向代理

    代理的核心功能可以用一句话概括:接受客户端的请求,转发到后端服务器,获得应答之后返回给客户端. 代理的功能有很多,事实上整个互联网到处都充斥着代理服务器.如果所有的 HTTP 访问都是客户端和服务器端直接进行的话,我们的网络不仅会变得缓慢,而且性能会大打折扣. 代理服务器根据不同的配置和使用,可能会有不同的功能,这些功能主要包括: 内容过滤:代理可以根据一定的规则限制某些请求的连接.比如有些公司会设置内部网络无法访问某些购物.游戏网站,或者学校的网络不让学生访问色情暴力的网站等 节省成本:代理服

  • 在Nginx服务器上配置Google反向代理的基本方法

    长期以来谷歌在TC一直被间歇性干扰,直至今日已经被完全屏蔽,给我们的学习和工作造成极大不便.以下为反代谷歌的教程,共有两种方式. 一.直接反向代理,使用的是7ghost源码搭建,优点是简单容易上手,缺点是容易被屏蔽,不能搜索敏感词. 二.使用SSL加密反向代理,优点是安全.不易被屏蔽,缺点是技术性相对较强,需要折腾的地方也多. 现在主要简单说下第二种方法的设置过程. Step1:你得需要有一台Linux的海外VPS. Step2:Nginx环境的建立(为了方便,教程中就用AMH一键包进行环境构建

  • Nginx反向代理至go-fastdfs案例讲解

    背景 go-fastdfs是支持http协议的一款分布式文件系统,在一般的项目中,很少是直接将文件系统的地址暴露出来的,大多数都会通过nginx等软件进行反代过去,由于我司的业务和网络环境场景相对特殊,由公网部分(公有云)和内网部分(私有云)组成的混合云网络体系,公有云主要就是作为一个出口和入口以及运行一些审计认证等应用,对上游请求进行处理,从而减少私有云的处理次数,提升性能.那么也正是因为这样,在公网的环境下,要访问到私有云提供的服务则必须使用反向代理.同样道理,对于文件系统的访问也如此,如何

  • 快速掌握Go语言正/反向代理

    先重温一下什么叫反向代理,正向代理. 所谓正向,反向代理取决于代理的是出站请求,还是入站请求. 正向代理: 代理的出站请求, 客户端能感知到代理程序,架构上距离客户端更近.反向代理: 代理的是入站请求,客户端认为代理程序就是服务器,客户端感知不到代理逻辑,架构上距离服务端更近. 前几天利用golang实现了反向代理程序,引出了Host请求头在反代中的关键作用. 对于proxy.com的请求,都被透明无感代理到A.com package main import ( "fmt" "

  • 分布式架构中关于正向代理反向代理面试提问

    目录 引言 1.面试官:完看你简历提到使用过Nginx做代理,你是如何理解“正向代理”,“反向代理”的? 2.面试官:那服务端为什么要使用代理?有啥好处? 3.面试官:那你知道哪些负载均衡算法? 深入分析 什么是负载均衡 常用的负载均衡框架 正向代理&反向代理 正向代理 反向代理 总结 引言 面完了RPC相关的一系列问题,面试官确定我对分布式架构的理论知识和服务间通讯框架(RPC) 确实了解了. 接下来又开始问我网络相关的知识,但不是直接问HTTP三次握手,TCP,UPD这些,因为这些基础已经在

  • 详解Nginx + Tomcat 反向代理 负载均衡 集群 部署指南

    Nginx是一种服务器软件,也是一种高性能的http和反向代理服务器,同时还是一个代理邮件服务器.也就是说,我们在Nginx上可以发布网站,可以实现负载均衡(提高应答效率,避免服务器崩溃),还可以作为邮件服务器实现收发邮件等功能.而最常见的就是使用Nginx实现负载均衡. Nginx与其他服务器的性能比较: Tomcat服务器面向Java语言,是重量级的服务器,而Nginx是轻量级的服务器.Apache服务器稳定.开源.跨平台,但是Apache服务器不支持高并发,Nginx能支持处理百万级的TC

  • springboot整合Nginx实现负载均衡反向代理的方法详解

    目录 一.百度百科 二.Nginx作为web服务器 三.Nginx处理请求逻辑图 四.Nginx的优点 五.Nginx应用场景 1.反向代理 2.负载均衡 3.动静分离 六.Nginx的常用命令 1.启动 2.从容停止 3.快速停止 4.强制停止 5.重启 6.重启Nginx服务 七.Nginx配置文件 八.Nginx 配置实例-反向代理实例 1.实现效果 2.准备工作 3.访问过程的分析 4.具体配置 5.最终测试 九.Nginx 的原理 1.mater 和 worker 2.worker 如

  • 反向代理缓存的详细介绍

    反向代理缓存的详细介绍  传统代理: 用户隐藏在代理服务器之后.代理服务器工作在应用层,它只转发它支持的协议的数据.    反向代理(Reverse Proxy): 这种机制是Web服务器隐藏在代理服务器之后,实现这种机制的服务器称作反向代理服务器(Reverse Proxy Server).此时,Web服务器成为后端服务器,反向代理服务器称为前端服务器. 引入反向代理服务器的目的之一就是基于缓存的加速.我们可以将内容缓存在反向代理服务器上,所有缓存机制的实现仍然采用HTTP/1.1协议. 反向

  • Nginx 安装笔记(含PHP支持、虚拟主机、反向代理负载均衡)

    系统环境:RHEL5 [ 2.6.18-8.el5xen ] 软件环境: nginx-0.7.17 lighttpd-1.4.20.tar.gz pcre-6.6-1.1 pcre-devel-6.6-1.1 php-5.1.6-5.el5 参考下载地址: http://sysoev.ru/nginx/nginx-0.7.17.tar.gz (最新稳定版为0.6.32) http://www.lighttpd.net/download/lighttpd-1.4.20.tar.gz #######

  • Nginx为Tomcat服务器作反向代理的配置教程

    web上的server都叫web server,但是大家分工也有不同的. nginx常用做静态内容服务和代理服务器(不是你FQ那个代理),直面外来请求转发给后面的应用服务(tomcat,django什么的),tomcat更多用来做做一个应用容器,让java web app跑在里面的东西,对应同级别的有jboss,jetty等东西. 但是事无绝对,nginx也可以通过模块开发来提供应用功能,tomcat也可以直接提供http服务,通常用在内网和不需要流控等小型服务的场景. apache用的越来越少

  • Nginx反向代理+DNS轮询+IIS7.5 千万PV 百万IP 双线 网站架构案例

    Nginx  ("engine x") 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器. Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,它已经在该站点运行超过两年半了.Igor 将源代码以类BSD许可证的形式发布. Nginx 的中文维基:http://wiki.codemongers.com/NginxChs 在高并发连接的情况下,Nginx是Apache服务器不错的替代品.Nginx

  • 自动化Nginx服务器的反向代理的配置方法

    如果可以减少过多的外部隔离的API和简化部署的细节 这会是非常好的. 在以前的文章中,我解释了"一些使用反向代理的好处".在我目前的项目里,我们已经构建分布式面向服务的架构,也显式提供了一个HTTP API,我们使用反向代理将请求路由通过API路由给单个组件.我们选择了Nginx Web这个优秀的服务器作为我们的反向代理,它快速.可靠且易于配置.我们通过它将多个HTTP的API服务聚合到一个URL空间.举例来说,当你键入: http://api.example.com/product/

随机推荐