如何制作反向代理?

时间:2019-04-15 07:57:07

标签: go reverse-proxy

我有一个用Go编写的服务器。我想为它编写一个反向代理服务器。服务器被编译成一个二进制文件。当我尝试通过代理服务器访问它时,它仅返回HTML页面而不绑定到CSS和JS脚本。如何组织静态文件的传输?

package main

import (
    "log"
    "net/http"
    "net/http/httputil"
    "net/url"
    "time"
)

func main() {
    mux := http.NewServeMux()
    u1, _ := url.Parse("http://localhost:8080/")
    proxy := httputil.NewSingleHostReverseProxy(u1)
    mux.Handle("/app1", proxy)

    serv := &http.Server{
        Addr:           ":9090",
        ReadTimeout:    10 * time.Second,
        WriteTimeout:   10 * time.Second,
        Handler:        mux,
    }

    err := serv.ListenAndServe()
    if err != nil {
        log.Fatal("ListenAndServe: ", err)
    }

}

1 个答案:

答案 0 :(得分:0)

编写反向代理是一项复杂的任务。如果您打算将其公开在公共互联网上,我建议使用现有的,例如Caddyserver,用Go语言编写,如果您自己编译而不使用预编译的二进制文件,它仍然是免费的。 source code of Caddyserver还可以为您提供想法,让您自己实现它。

关于服务文件的更具体问题:可以使用http.ServeFile方法完成,或者更方便地使用httprouter's ServeFiles或FileServer方法。参见https://github.com/julienschmidt/httprouter#static-files