golang http proxy反向代理
本文介绍golang中如何进行反向代理。
下面例子中,
proxy server接收client 的 http request,转发给true server,并把 true server的返回结果再发送给client。
1.proxy server
proxyServer.go代码如下所示。
// proxyServer.go
package main
import (
"log"
"net/http"
"net/http/httputil"
"net/url"
)
//将request转发给 http://127.0.0.1:2003
func helloHandler(w http.ResponseWriter, r *http.Request) {
trueServer := "http://127.0.0.1:2003"
url, err := url.Parse(trueServer)
if err != nil {
log.Println(err)
return
}
proxy := httputil.NewSingleHostReverseProxy(url)
proxy.ServeHTTP(w, r)
}
func main() {
http.HandleFunc("/hello", helloHandler)
log.Fatal(http.ListenAndServe(":2002", nil))
}
proxyServer监听端口2002,提供HTTP request "/hello" 的转发服务。
其中,
func NewSingleHostReverseProxy
func NewSingleHostReverseProxy(target *url.URL) *ReverseProxy
NewSingleHostReverseProxy 返回一个新的 ReverseProxy, 将URLs 请求路由到targe的指定的scheme, host, base path 。
如果target的path是"/base" ,client请求的URL是 "/dir", 则target 最后转发的请求就是 /base/dir。
type ReverseProxy
ReverseProxy 是 HTTP Handler, 接收client的 request,将其发送给另一个server, 并将server 返回的response转发给client。
2.true server
trueServer.go代码如下所示。
// trueServer.go
package main
import (
"io"
"net/http"
"log"
)
func helloHandler(w http.ResponseWriter, req *http.Request) {
io.WriteString(w, "hello, world!\n")
}
func main() {
http.HandleFunc("/hello", helloHandler)
log.Fatal(http.ListenAndServe(":2003", nil))
}
trueServer 作为一个HTTP server,监听端口2003,提供"/hello"的实际处理。
3.client
client代码如下
$ curl http://127.0.0.1:2002/hello
hello, world!
参考
golang http proxy反向代理的更多相关文章
- Docker Nginx-Proxy 容器Nginx Proxy反向代理
Docker Nginx-Proxy 容器Nginx Proxy反向代理 简单介绍 Docker容器的自动Nginx反向代理 dockerhub地址 https://hub.docker.co ...
- create-react-app设置proxy反向代理不起作用
在CRA2.X升级以后对proxy的设置做了修改,引用官方升级文档: Object proxy configuration is superseded by src/setupProxy.js To ...
- Go语言正/反向代理的姿势
先重温一下什么叫反向代理,正向代理. 鹅厂二面,nginx回忆录 所谓正向,反向代理取决于代理的是出站请求,还是入站请求. 正向代理: 代理的出站请求, 客户端能感知到代理程序,架构上距离客户端更近. ...
- NodeJS学习笔记 - Apache反向代理集成实现
初学,简单的实现,为进行优化. 1. 假设NodeJS服务端监听3000端口 2. Apache反向代理设置 a. 在httpd.conf配置文件中开启代理模块 LoadModule proxy_mo ...
- nginx详解反向代理、负载均衡、LNMP架构上线动态网站(week4_day1_part1)-技术流ken
nginx介绍 Nginx是俄罗斯人编写的十分轻量级的HTTP服务器,Nginx,它的发音为“engine X”,是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP 代理 ...
- Nginx学习笔记(反向代理&搭建集群)
一.前言 1.1 大型互联网架构演变历程 1.1.1 淘宝技术 淘宝的核心技术(国内乃至国际的 Top,这还是2011年的数据) 拥有全国最大的分布式 Hadoop 集群(云梯,2000左右节点,24 ...
- nginx 反向代理与负载均衡应用实践
集群介绍 集群就是指一组(若干个)相互独立的计算机,利用高速通信网络组成的一个较大的计算机服务系统,每个集群节点(即集群中的每台计算机)都是运行各自服务的独立服务器.这些服务器之间可以彼此通信,协同向 ...
- Linux实战教学笔记30:Nginx反向代理与负载均衡应用实践
1.1 集群简介 简单地说,集群就是指一组(若干个)相互独立的计算机,利用高速通信网络组成的一个较大的计算机服务系统,每个集群节点(即集群中的每台计算机)都是运行各自服务的独立服务器.这些服务器之间可 ...
- nginx反向代理,负载均衡,动静分离,rewrite地址重写介绍
一.rewrite地址重写 地址转发后客户端浏览器地址栏中的地址显示是不变的,而地址重写后地址栏中的地址会变成正确的地址. 在一次地址转发过程中只会产生一次网络请求,而一次地址重写产生两次请求. 地址 ...
随机推荐
- 一起用ipython
安装 安装python2版本的软件包就用命令 pip install ipython 安装python3版本对应的软件包就用命令 pip3 install ipython 进入了ipython,ipy ...
- [C#]中获取当前程序运行路径的方法
获取当前程序运行路径: ①//获取当前 Thread 的当前应用程序域的基目录,它由程序集冲突解决程序用来探测程序集.string str = System.AppDomain.CurrentDoma ...
- Java集合框架源码分析(2)LinkedList
链表(LinkedList) 数组(array)和数组列表(ArrayList)都有一个重大的缺陷: 从数组的中间位置删除一个元素要付出很大的代价,因为数组中在被删除元素之后的所有元素都要向数组的前端 ...
- numpy delete
手动安装 sudo rm -rf /usr/local/lib/python2.7/site-packages/numpy/ sudo rm -rf /usr/local/lib/python2.7/ ...
- unity中 UGUI的按下、拖动接口事件的实现
using UnityEngine; using System.Collections.Generic; using DG.Tweening; using UnityEngine.EventSyste ...
- 从0到有,虚拟机安装centos,然后ssh连接虚拟机
安装centos 1.下载centos镜像 https://mirrors.aliyun.com/centos/6.8/isos/x86_64/CentOS-6.8-x86_64-bin-DVD1.i ...
- flask 自动切换环境
简介: 我就是个半吊子程序员.在单位写点程序,在家也写点程序. 单位是企业网,不能上互联网,家里也没办法连上企业网,没有VPN. 主武器是我的笔记本电脑.在单位有一台淘汰的linux服务器,家里有个N ...
- VirtualBox导致Vmware的虚拟机桥接模式网络不通
VMware内的虚拟机,设置为桥接后,无法连接外网.物理主机IP地址:192.168.0.60,虚拟机IP地址:192.168.0.61,网关地址:192.168.0.1虚拟机网络采用桥接模式: 从物 ...
- webApp总结
有关Meta 基本Meta <!-- 设置缩放 --> <meta name="viewport" content="width=device-widt ...
- ActiveMQ使用介绍及实例
上一篇讲了rabbitmq的使用以及demo,activemq的思路也与之有相似的地方. activemq是基于Java实现的.activemq没有rabbitmq那么多的路由规则,其通信方式只有两种 ...