Aci*_*dic 5 port http nginx go
我正在运行安装了Ubuntu的VPS.如何在不指定URL中的端口(xxx.xxx.xxx.xxx:8084)的情况下使用相同的VPS(相同的IP)来为多个Golang网站提供服务?
例如,Golang app 1正在侦听端口8084,而Golang app 2正在侦听端口8060.当有人从域请求时,我希望Golang app 1能够在域example1.com和Golang应用2请求时提供服务example2.com.
我相信你可以用Nginx做到这一点但我无法弄清楚如何做到这一点.
Nginx免费解决方案.
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
Run Code Online (Sandbox Code Playgroud)
然后使用gorilla/mux或类似方法为每个主机创建路由,甚至从中获取"子路由器"
r := mux.NewRouter()
s := r.Host("www.example.com").Subrouter()
Run Code Online (Sandbox Code Playgroud)
所以完整的解决方案就是
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.ListenAndServe(":8000", nil)
}
Run Code Online (Sandbox Code Playgroud)
请尝试以下代码,
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;
}
...
}
Run Code Online (Sandbox Code Playgroud)
app_ip 是主机的 IP,如果在同一台机器上,则输入http://127.0.0.1或http://localhost
| 归档时间: |
|
| 查看次数: |
2111 次 |
| 最近记录: |