【问题标题】:What are my options to deploy Go applications alongside PHP applications?将 Go 应用程序与 PHP 应用程序一起部署有哪些选择?
【发布时间】:2012-05-25 11:52:43
【问题描述】:

我基本上想要完成的是让我的主网站运行一个用 Go 编写的 CMS。这将位于 www.example.com。

我还有一些用 PHP 编写的应用程序,它们位于目录中,例如 www.example.com/clients/

如何在使用 Go 内置 Web 服务器提供 example.com 的同时使用 Apache/PHP 提供 example.com/clients?

【问题讨论】:

    标签: apache nginx go fastcgi


    【解决方案1】:

    通过 Apache2 中的 mod_proxy,您可以将不同的路径代理到 localhost 或您的服务器可访问的任何其他位置的不同目的地,包括您的本地网络(如果您的服务器可以访问它)。

    为此,您将使用ProxyPassApache2 Docs for ProxyPass,这是非常有用的阅读),如下例所示:

    <VirtualHost *:80>
      ServerName some.example.host.xyz
    
      DocumentRoot /var/www/your-document-root
    
      Alias /clients/ /var/www/clients/
      ProxyPass /clients/ !
      ScriptAlias /something-using-cgi/ /var/www/cgi-stuff/
      ProxyPass /something-using-cgi/ !
    
      ProxyPreserveHost On
      ProxyPass / http://localhost:9876/
      ProxyPassReverse / http://localhost:9876/
      ProxyPass /elsewhere/ http://elsewhere.example.host.xyz:1234/
      ProxyPassReverse /elsewhere/ http://elsewhere.example.host.xyz:1234/
    </VirtualHost>
    

    您需要确保设置代理安全,以使外部用户也无法将您的反向代理用作正向代理。您可以通过ProxyRequests 执行此操作,如官方 Apache2 文档中所述。我在服务器上执行此操作的方式是将其放入您的服务器范围的配置中(您应该自行验证这是否足够安全):

    # disables forward proxy
    ProxyRequests Off
    

    【讨论】:

    • 虽然 Apache 是一个很好的例子,但我知道的每个流行的网络服务器也可以做到这一点。如果您使用 Apache 作为示例来说明这个概念,我会更喜欢。特别是因为 nginx 在帖子中也被标记了。
    • @mvrak:以上是使用 Apache。我不明白你的意思。
    • 可能是语义问题,但您的回答可能会被解释为 Apache 高度特定的东西,而不是大多数网络服务器所具有的功能,例如 Apache 中的模块 mod_proxy。
    • 我的回答特定于 Apache。我这样做的原因是因为实际请求是这样的:“我如何使用 Apache/PHP 为 example.com/clients 提供服务,同时使用 Go 内置 Web 服务器为 example.com 提供服务?” 这个词指定了“Apache”。但是在 nginx 中做这件事会很不一样。没有标准的方法可以做到这一点,只有如何做到这一点的标准想法,这不是请求的一部分。
    【解决方案2】:

    Andrew Gerrand 有一个很好的 blog post 用于 nginx,但原理与 Apache 相同。

    您希望将 Apache 设置为 Go 应用程序传入请求的反向代理。 对于 Apache 你想看看mod_proxy

    【讨论】:

    • @adamsilver:你现在只是在猜测,还是真的有什么东西让你这么想?使用&lt;Location /clients/&gt; 怎么样?或者 location /clients/ { … }; 在 nginx 上?
    • 您可以使用 mod_rewritemod_proxy 进行代理 URL 过滤,以便您可以将特定路径或目录推送到不同的后端目标,例如基于 Go 的服务器或其他位置,同时保留其他部分根据需要您在 Apache 中的路径。
    猜你喜欢
    • 1970-01-01
    • 2014-04-05
    • 2011-06-16
    • 1970-01-01
    • 2017-01-13
    • 1970-01-01
    • 1970-01-01
    • 2012-04-19
    • 1970-01-01
    相关资源
    最近更新 更多