引用 elitha 的评论,
您有两个选择:关闭 Apache(因为只有一个服务可以绑定到端口),或者(更好!)使用 Apache 的ProxyPass将任何传入请求代理到特定主机名到运行在端口(例如)8000 上的 Go 服务器。第二种方法非常流行、健壮,您可以使用 Apache 为您处理请求日志记录和 SSL。
反向代理
以这种方式在端口 80 上使用 Apache 称为反向代理。它接收端口 80(和/或 https 的端口 443)上的所有传入连接,并将它们(通常未加密)仅通过内部 localhost 连接传递给在您选择的任何端口上运行的 Go 程序。经常使用8000和8080。Apache 和您的服务器之间的流量本身就是 HTTP 流量。
因为您的 Go 程序不是以 root 身份运行的,所以它无法更改服务器上的关键功能。因此,如果您的程序包含安全漏洞,它会提供额外的安全性,因为任何攻击者都只能获得有限的访问权限。
快速CGI
您可以通过不使用 HTTP进行从 Apache 到 Go 服务器的连接来提高反向代理的整体性能。这是通过FastCGI 协议完成的,该协议最初是为 shell、Perl 和 PHP 脚本开发的,但也适用于 Go。要使用它,您必须修改您的 Go 服务器以使用fcgi API 进行侦听。还需要Apache FastCGI 。从 Apache 到您的服务器的流量使用更紧凑的格式(不是 HTTP),这减少了每一端的负载。
套接字类型的选择也是开放的:可以使用Unix 套接字代替通常的 TCP 套接字,这进一步减少了处理负载。我自己在 Go 中没有这样做,但 API 支持必要的位(请参阅相关问题)。
Nginx
虽然以上所有内容都描述了使用 Apache,但还有其他服务器产品也可以提供反向代理。最值得注意的是Nginx(Nginx 反向代理示例),它将为您提供小而有用的性能和可扩展性优势。如果您的服务器上有此选项,则值得努力学习和部署。