运行 Phusion Passenger 背后的 Go 网络服务器

Running a Go webserver behind Phusion Passenger

Phusion Passenger 在网络服务器后面为 运行ning 网络应用程序提供了一个很好的生态系统。我有 Ruby 和 Node.js 应用程序的经验。现在我重写了一个 web 服务来使用 Go,是时候部署它了。将 Passenger+Nginx 放在 go webserver 前面似乎很自然(使用 net/http)。搜索了一下好像没有人试过这个,也没有人问过这个问题...

我似乎找不到附加自定义二进制文件的配置选项,而不是 passenger_ruby/passenger_node

我可以(应该吗?)使用 Phusion Passenger 运行 我使用 go build 创建的二进制文件?

不,你不能。 Passenger 实际上并不在内部使用 HTTP;它使用自定义协议(如 FastCGI 或 SCGI,但两者都不兼容)与您的应用程序通信,并且需要在应用程序中使用自己的代码来管理和调度请求。他们没有为 Go 提供这样的支持代码。

这实际上是可能的,乘客 6 已经添加了通用语言支持。您可以在此处找到教程:https://www.phusionpassenger.com/docs/advanced_guides/gls/go.html

基本上:

  1. 编译您的 Go 程序并将二进制文件放在方便的地方。应用程序需要接受配置以选择要 运行 的端口。
  2. passenger start --app-start-command 'env PORT=$PORT ./main' 假设 main 是您的程序名称。

Passenger 将尝试告诉应用程序启动哪个端口,以便它可以拥有端口 80/443。