是否可以在 Golang 中处理多个域?

Is it possible to handle multi domains in Golang?

我想用 Golang 处理多域。

像这样,如果浏览器发送请求 http://sampledomain.me 用特定的 Golang 程序处理它,

在其他情况下,我希望在一台服务器上运行多个程序并告诉每个程序处理每个域。

所有程序都在 80 上侦听,许多域指向一台服务器。

有人可以帮助我吗?

谢谢...

是的,这是可能的,因为域在 URL 中,您可以轻松过滤要使用的处理程序。我找到了这个指南 http://codepodu.com/subdomains-with-golang/

您的 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;
        }

}

你真的不需要前面的任何东西,比如nginx, 尽管在某些情况下建议这样做。

请在此处查找类似答案“

我两者都用,但最喜欢第二种解决方案:

  1. 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; } ... } . . .

  2. nginx 作为代理在同一端口 (8081) 上具有多个 Golang 应用程序 分隔符(Golang) func (u *URL) Hostname() string

    服务器{ ... 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