Apache2 VirtualDocumentRoot 和代理

Apache2 VirtualDocumentRoot 和代理

我使用非常简单的/etc/apache2/sites-enabled/000-default配置,例如

<VirtualHost 117.121.241.184>
UseCanonicalName    Off
VirtualDocumentRoot /srv/www/%0
Options All ExecCGI
LogFormat "%V %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" vhost_common
CustomLog /var/log/apache2/access.log vhost_common
</VirtualHost>

其中 117.121.241.184 是我正在设置的机器的 IP。

现在我想做一些稍微复杂的事情,即代理一个 NodeJS 实例,如下所示:

<VirtualHost foobar.example.com:80>
 <Location />
   ProxyPass http://localhost:3000/
   ProxyPassReverse http://localhost:3000/
 </Location>
</VirtualHost>

但它不起作用。Apache 只提供/srv/www/foobar.example.com。如果我将“VirtualHost foobar.example.com”节多于虚拟文档根一,那么所有内容都会重定向到代理,这是我不想要的。

我只想让代理处理特定域“foobar.example.com”,其他的都由VirtualDocumentRoot处理。

答案1

您要配置的是基于名称的虚拟主机,其中虚拟主机是根据Host客户端在 HTTP 请求中发送的标头来选择的。

为此,您需要一个NameVirtualHost指令,并使您的<VirtualHost>块与您在其中配置的内容完全匹配。例如:

NameVirtualHost *:80
<VirtualHost *:80>
  ServerName default
  VirtualDocumentRoot /srv/www/%0
  # other needed config directives here
</VirtualHost>
<VirtualHost *:80>
  ServerName foobar.example.com
  <Location />
    ProxyPass http://localhost:3000/
    ProxyPassReverse http://localhost:3000/
  </Location>
</VirtualHost>

相关内容