我正在运行安装了Ubuntu的VPS。 我怎样才能使用相同的VPS(相同的IP)为多个Golang网站提供服务,而不必在URL中指定端口(xxx.xxx.xxx.xxx:8084)?
例如, Golang应用程序1正在侦听端口8084,而Golang应用程序2正在侦听端口8060 。 我希望Golang应用程序1在有人从域example1.com
请求时提供,而Golang应用程序2则在有人从example2.com
请求时提供服务。
我相信你可以用Nginx做到这一点,但我一直无法弄清楚。
请尝试下面的代码,
server { ... server_name www.example1.com example1.com; ... location / { proxy_pass app_ip:8084; } ... } ... server { ... server_name www.example2.com example2.com; ... location / { proxy_pass app_ip:8060; } ... }
app_ip是机器的IP地址,如果在同一台机器上,则将http://127.0.0.1
或http://localhost
Nginx免费解决方案。
首先,您可以将端口80上的连接重定向为普通用户
sudo apt-get install iptables-persistent sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8000 sudo netfilter-persistent save sudo netfilter-persistent reload
然后使用大猩猩/多路复用器或类似的为每个主机创建一个路由,甚至从它得到一个“子路由器”
r := mux.NewRouter() s := r.Host("www.example.com").Subrouter()
所以完整的解决方案将是
package main import ( "net/http" "github.com/gorilla/mux" "fmt" ) func Example1IndexHandler(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello www.example1.com!") // send data to client side } func Example2IndexHandler(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello www.example2.com!") // send data to client side } func main() { r := mux.NewRouter() s1 := r.Host("www.example1.com").Subrouter() s2 := r.Host("www.example2.com").Subrouter() s1.HandleFunc("/", Example1IndexHandler) s2.HandleFunc("/", Example2IndexHandler) http.listnAndServe(":8000", nil) }