【问题标题】:Rails/Puma with Apache HTTPD proxy?Rails/Puma 与 Apache HTTPD 代理?
【发布时间】:2015-04-15 13:06:29
【问题描述】:

我想使用 Puma 和 HTTPD 来为我的 Rails 应用程序提供服务。据我所知,人们做这种事情的例子并不多。我知道 nginx 比 HTTPD 有一些好处,Passenger 让很多事情变得简单,但是有理由使用 Puma/HTTPD?

我浏览了一些在线示例,并整理了一个我喜欢的 HTTPD 配置块,它似乎工作正常(尽管我没有进行任何性能测试)。我错过了什么吗?这似乎比大多数 Puma/nginx 或Passenger/HTTPD 设置更容易/更简单,这让我有点担心。

<VirtualHost *:3008>
  DocumentRoot MY_RAILS_ROOT/public
  ProxyPass /favicon.ico !
  ProxyPass /robots.txt !
  ProxyPassMatch ^/(404|422|500).html$ !
  ProxyPass /assets/ !

  ProxyPass / http://127.0.0.1:9292/ # Puma bind address
  ProxyPassReverse / http://127.0.0.1:9292/
</VirtualHost>

【问题讨论】:

  • 在我们的项目中,我们有 varnish->nginx->puma 堆栈,它工作得很好。 Nginx 总体上更健壮、更快、更强大,而且它的内存消耗比 httpd 少。无论如何,你真的需要 HTTPD 吗?:) 阅读有关 httpd(模块化)和 nginx(编译的模块)的架构。但如果性能不是问题,而且你很了解 httpd,请使用它:) 编辑:考虑在 unix sock 模式下启动 puma,它会获得一些性能提升。

标签: ruby-on-rails apache puma


【解决方案1】:

这是将 Apache HTTPD 用作反向代理的相当常见的用法,因此没有特别的问题。您是否在同一台机器上同时运行 Web 服务器和 puma?拆分它们可能是一个好主意,以防止内存消耗、TCP 堆栈和任何其他可能在高负载下发生的争用问题。

如果你有多个 puma 节点,那么你可以使用 HTTPD 在所有节点上执行负载平衡,如下所示:

<VirtualHost example.org:80>
    ServerName example.org
    ServerAlias www.example.org

    ErrorLog /srv/www/example.org/logs/error.log 
    CustomLog /srv/www/example.org/logs/access.log combined

    DocumentRoot MY_RAILS_ROOT/public

    <Proxy balancer://cluster>
        BalancerMember http://app1.example.org
        BalancerMember http://app2.example.org
    </Proxy>

    ProxyPass /favicon.ico !
    ProxyPass /robots.txt !
    ProxyPassMatch ^/(404|422|500).html$ !
    ProxyPass /assets/ !

    ProxyPass / balancer://cluster/
    # enumerate all nodes for proxypassreverse since it adds a trailing slash :( bugid 51982
    ProxyPassReverse / http://app1.example.org
    ProxyPassReverse / http://app2.example.org


    # ProxyPass / balancer://cluster/ lbmethod=byrequests
    # ProxyPass / balancer://cluster/ lbmethod=bytraffic
    # ProxyPass / balancer://cluster/ lbmethod=bybusyness
</VirtualHost>

虽然如果您有更好的 HA 选项(即 AWS ELB、HAProxy、Varnish 或其他任何东西),那么我更希望您可以免费获得第 7 层可用性检查

【讨论】:

    猜你喜欢
    • 2019-05-09
    • 2011-05-06
    • 1970-01-01
    • 1970-01-01
    • 2019-07-11
    • 2017-08-03
    • 1970-01-01
    • 1970-01-01
    • 2014-02-08
    相关资源
    最近更新 更多