如何使用Puppet的Apache模块执行Location / ProxyPass?

问题描述

我想使用Puppet部署和配置Apache。我看到有一个Apache模块https://forge.puppet.com/puppetlabs/apache),但是我不清楚如何设置Apache服务器来处理大量的位置/ ProxyPass对,格式如下:

<IfModule mod_proxy.c>

<Location /foo>
    ProxyPass            http://fooserve.llnl.gov:8080/foo
    ProxyPassReverse     http://fooserve.llnl.gov:8080/foo
</Location>

<Location /bar>
    ProxyPass            http://barserve.llnl.gov:8080/bar
    ProxyPassReverse     http://barserve.llnl.gov:8080/bar
</Location>


</IfModule>

我看到了有关虚拟主机的文档,但在我看来这是不同的。我真正想要的是一次传递一大堆位置/ URI对。这可能吗?

解决方法

您可以将directoriesproxy_pass一起使用,如下所示:

apache::vhost { 'x.y.z':
...
  directories => [
    {
      path       => '/foo',provider   => 'location',proxy_pass => [ { url => 'http://fooserve.llnl.gov:8080/foo' } ],},{
      path       => '/bar',proxy_pass => [ { url => 'http://fooserve.llnl.gov:8080/bar' } ],],...
}

这将生成您所描述的Apache配置文件。另一种方法是在VirtualHost级别拥有所有ProxyPass指令,如下所示:

<IfModule mod_proxy.c>

    ProxyPass            /foo http://fooserve.llnl.gov:8080/foo
    ProxyPassReverse     /foo http://fooserve.llnl.gov:8080/foo

    ProxyPass            /bar http://barserve.llnl.gov:8080/bar
    ProxyPassReverse     /bar http://barserve.llnl.gov:8080/bar

</IfModule>

在人偶清单中,就像这样:

apache::vhost { 'x.y.z':
...
  proxy_pass => [
    {
      path => '/foo',url  => 'http://http://fooserve.llnl.gov:8080/foo',{
      path => '/bar',url  => 'http://http://fooserve.llnl.gov:8080/bar',...
}