繁体   English   中英

去,sudo和apache端口80

[英]Go, sudo, and apache port 80

我在golang中使用gorilla / mux包,但是有一些问题。 第一个是我没有权限在我的应用程序上使用端口80,因为我无法从sudo运行应用程序,因为在使用sudo时没有设置$GOPATH

这是我从我的程序中得到的错误:

$ go run app.go 
2014/06/28 00:34:12 Listening...
2014/06/28 00:34:12 ListenAndServe: listen tcp :80: bind: permission denied
exit status 1

我不确定当我修复sudo问题时它是否会工作,因为apache已经在使用端口80而且我不确定我的app和apache是​​否可以“一起玩得很好”。

关于如何解决这个问题的任何建议都会很棒。 谢谢。

引用elithar的评论,

您有两个选择:关闭Apache(因为只有一个服务可以绑定到一个端口),或者(更好!)使用Apache的ProxyPass将任何传入的请求代理到特定主机名到运行在端口(例如)8000上的Go服务器。第二种方法非常流行,健壮,您可以使用Apache来处理请求记录和SSL。

反向代理

以这种方式在端口80上使用Apache称为反向代理 它接收端口80上的所有传入连接(和/或用于https的端口443),并将它们(通常是未加密的)通过内部本地主机连接传递给在您选择的任何端口上运行的Go程序。 经常使用8000和8080。 Apache和您的服务器之间的流量本身就是HTTP流量

因为您的Go程序不以root身份运行,所以它无法更改服务器上的关键功能。 因此,如果您的程序包含安全漏洞,它会提供额外的安全性,因为任何攻击者都只能获得有限的访问权限。

FastCGI的

通过不使用HTTP进行从Apache到Go服务器的连接,可以提高反向代理的整体性能。 这是通过最初为shell,Perl和PHP脚本开发的FastCGI协议完成的,但也适用于Go。 要使用此功能,您必须使用fcgi API修改Go服务器以进行侦听。 Apache FastCGI也是必需的。 从Apache到您的服务器的流量使用更紧凑的格式(而不是HTTP),这会减少每端的负载。

套接字类型的选择也是开放的:代替通常的TCP套接字,可以使用Unix套接字 ,这进一步降低了处理负荷。 我自己没有这样做,但API支持必要的位 (参见相关问题 )。

Nginx的

虽然以上所有内容都描述了使用Apache,但还有其他服务器产品也可以提供反向代理。 最值得注意的是NginxNginx反向代理示例 ),它将为您提供小巧但有用的性能和可扩展性优势。 如果您的服务器上有此选项,则值得学习和部署。

根据之前关于环境变量的答案,我能够轻松解决sudo问题。

https://stackoverflow.com/a/8636711/2576956

 sudo visudo

添加这些行:

Defaults env_keep +="GOPATH"
Defaults env_keep +="GOROOT"

顺便使用ubuntu 12.04。 我认为以前关于使用端口80的代理的答案是正确的选择,因为在修复sudo问题之后我得到了关于端口80的这个错误:

$ sudo go run app.go 
2014/06/28 01:26:30 Listening...
2014/06/28 01:26:30 ListenAndServe: listen tcp :80: bind: address already in use
exit status 1

这意味着sudo命令已修复,但代理绑定不适用于已使用端口80(apache)的其他服务。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM