我有一个用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)
}
}
答案 0 :(得分:0)
编写反向代理是一项复杂的任务。如果您打算将其公开在公共互联网上,我建议使用现有的,例如Caddyserver,用Go语言编写,如果您自己编译而不使用预编译的二进制文件,它仍然是免费的。 source code of Caddyserver还可以为您提供想法,让您自己实现它。
关于服务文件的更具体问题:可以使用http.ServeFile方法完成,或者更方便地使用httprouter's ServeFiles或FileServer方法。参见https://github.com/julienschmidt/httprouter#static-files。