go学习笔记:golang实现的反向代理
qdx411324962 · · 3035 次点击 · · 开始浏览翻阅golang包手册的时候看到net/http/httputil有一个type ReverseProxy,这个不是反向代理吗!golang自带反向代理功能?好奇就试了一下,确实非常简单,没有几行代码就实现了一个简易的反向代理服务。
关于反向代理百度百科上说的非常详细了,这里摘录一下定义:
反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。
golang实现代码
package
mainimport
("log""net/http""net/http/httputil""net/url")type
handle struct {host
stringport
string}func
(this *handle) ServeHTTP(w http.ResponseWriter, r *http.Request) {remote,
err := url.Parse("http://"
+ this.host + ":"
+ this.port)if
err != nil {panic(err)}proxy
:= httputil.NewSingleHostReverseProxy(remote)proxy.ServeHTTP(w,
r)}func
startServer() {//被代理的服务器host和porth
:= &handle{host: "127.0.0.1",
port: "80"}err
:= http.ListenAndServe(":8888",
h)if
err != nil {log.Fatalln("ListenAndServe:
",
err)}}func
main() {startServer()}关键的代码就是NewSingleHostReverseProxy这个方法,查看源码的话不难看出该方法返回了一个ReverseProxy对象,在ReverseProxy中的ServeHTTP方法实现了这个具体的过程,主要是对源http包头进行重新封装,而后发送到后端服务器。
转自:http://www.01happy.com/golang-reverse-proxy/
有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
关注微信- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码` - 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传
收入到我管理的专栏 新建专栏
翻阅golang包手册的时候看到net/http/httputil有一个type ReverseProxy,这个不是反向代理吗!golang自带反向代理功能?好奇就试了一下,确实非常简单,没有几行代码就实现了一个简易的反向代理服务。
关于反向代理百度百科上说的非常详细了,这里摘录一下定义:
反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。
golang实现代码
package
mainimport
("log""net/http""net/http/httputil""net/url")type
handle struct {host
stringport
string}func
(this *handle) ServeHTTP(w http.ResponseWriter, r *http.Request) {remote,
err := url.Parse("http://"
+ this.host + ":"
+ this.port)if
err != nil {panic(err)}proxy
:= httputil.NewSingleHostReverseProxy(remote)proxy.ServeHTTP(w,
r)}func
startServer() {//被代理的服务器host和porth
:= &handle{host: "127.0.0.1",
port: "80"}err
:= http.ListenAndServe(":8888",
h)if
err != nil {log.Fatalln("ListenAndServe:
",
err)}}func
main() {startServer()}关键的代码就是NewSingleHostReverseProxy这个方法,查看源码的话不难看出该方法返回了一个ReverseProxy对象,在ReverseProxy中的ServeHTTP方法实现了这个具体的过程,主要是对源http包头进行重新封装,而后发送到后端服务器。
转自:http://www.01happy.com/golang-reverse-proxy/