我想用Golang处理多域。
像这样,如果浏览器发送http://sampledomain.me请求,则使用特定的Golang程序处理它,
在其他情况下,我想在一台服务器上安装许多程序并告诉每一台程序,以处理每个域。
所有程序都在监听80,许多域指向一台服务器。
任何人都可以帮助我吗?
... THX
答案 0 :(得分:5)
你的Go程序不能全部监听端口80.你需要前面的东西,比如nginx,作为反向代理。以下nginx配置摘录会将两个域转发到两个不同的程序,每个程序都在不同的端口上侦听:
server {
listen 80;
server_name www.domain1.com;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_read_timeout 600s;
}
}
server {
listen 80;
server_name www.domain2.com;
location / {
proxy_pass http://127.0.0.1:8081;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_read_timeout 600s;
}
}
答案 1 :(得分:1)
你真的不需要任何东西,比如nginx, 虽然在某些情况下是推荐的。
请在此处找到类似的答案“Host Multiple Golang Sites on One IP and Serve Depending on Domain Request”
答案 2 :(得分:0)
是的,由于域名在URL中,您可以轻松过滤您想要使用的处理程序。我找到了这个指南http://codepodu.com/subdomains-with-golang/
答案 3 :(得分:0)
我都使用,但最喜欢第二种解决方案:
nginx作为代理,在多个端口上具有多个Golang应用 即GoApp1:8081 GoApp2:8082 GoApp3:8083 ....
服务器{ ... server_name www.example1.com example1.com; ... 位置 / { proxy_pass app_ip:8081; } ... } 服务器{ ... server_name www.example2.com example2.com; ... 位置 / { proxy_pass app_ip:8082; } ... } 。 。
nginx作为代理,在同一端口上具有多个Golang应用程序(8081) 用(Golang)func(u * URL)Hostname()字符串分隔
服务器{ ... server_name www.example1.com example1.com; ... 位置 / { proxy_pass app_ip:8081; } ... }
还有另一种解决方法(没有nginx): sudo apt-get install iptables-persistent
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8081
sudo netfilter-persistent save
sudo netfilter-persistent reload