【发布时间】:2017-08-31 12:39:04
【问题描述】:
一个天真的反向代理是这样的:
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 访问。我怀疑虚拟主机不起作用?没有把握。
真正的反向代理是如何完成的?
【问题讨论】:
-
棘手的是,您希望 RP 具有镜像 Google 的行为(例如在您的示例中设置 Host 标头并遵循重定向)可能不是您想要的 RP 坐在前面您的应用服务器(为了缓存、提供静态内容、过滤 DoS 攻击等)。在我们知道您的应用出了什么问题之前,您可能很难凭直觉知道您需要什么。
-
检查这个项目可能会给你一些想法slashquery.com
标签: go reverse-proxy