2017-08-18 20 views
1

一个天真的反向代理是这样的:在go中构建完整的HTTP反向代理需要什么?

package main 

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

func main() { 
    // New functionality written in Go 
    http.HandleFunc("/new", func(w http.ResponseWriter, r *http.Request) { 
     fmt.Fprint(w, "New function") 
    }) 

    // Anything we don't do in Go, we pass to the old platform 
    u, _ := url.Parse("http://www.google.com/") 
    http.Handle("/", httputil.NewSingleHostReverseProxy(u)) 

    // Start the server 
    http.ListenAndServe(":8080", nil) 
} 

但是,这是不完整的。根据网站你可能没有得到任何有用的东西。一些做https重定向。有些人抱怨直接ip访问。我怀疑虚拟主机不工作?不确定。

真正的反向代理是如何完成的?

+1

有一点棘手的是,您希望RP用于镜像Google的行为(例如设置Host标题并按照示例中的重定向)可能不是您想要从位于您的应用服务器前的RP所获得的行为为了缓存,提供静态内容,过滤DoS攻击或其他)。直到我们知道你的应用出了什么问题,可能很难直觉你需要什么。 – twotwotwo

+1

检查这个项目可能会给你一些想法https://slashquery.com – nbari

回答

2

在Go中实现反向HTTP代理的最简单方法是使用标准库中的httputil.ReverseProxy类型。

这使您可以灵活地设置可以修改传入请求的Director函数,并可以动态修改请求和/或响应。

它应该能够处理绝大多数反向代理情况。我在一个项目中取得了巨大的成功。

相关问题