如何在apache上使用DDEV拥有多个docroot?

如何在apache上使用DDEV拥有多个docroot?,ddev,Ddev,在我的ddev容器中,我使用Dockerfile中添加并启用的站点中的conf文件在Apache中配置了多个vhost。 在文档中,有人说我们应该使用$WEBSERVER_DOCROOT,默认情况下是/var/www/html,但是这个值在任何自定义conf文件(apache-site.conf或sites-available文件)中都不可用。 所以我必须硬编码它,而且我必须在每个conf文件中这样做,因为我无法为所有vhost定义一个值并共享它 我的Dockerfile: ADD sites-

在我的ddev容器中,我使用Dockerfile中添加并启用的站点中的conf文件在Apache中配置了多个vhost。 在文档中,有人说我们应该使用$WEBSERVER_DOCROOT,默认情况下是/var/www/html,但是这个值在任何自定义conf文件(apache-site.conf或sites-available文件)中都不可用。 所以我必须硬编码它,而且我必须在每个conf文件中这样做,因为我无法为所有vhost定义一个值并共享它

我的Dockerfile:

ADD sites-available/my.site1.tld.conf /etc/apache2/sites-available
RUN a2ensite my.site1.tld
我的配置文件: my.site1.tld.conf:

<VirtualHost *:80>
    ServerName my.site1.tld

    DocumentRoot $WEBSERVER_DOCROOT/my.site1.tld/www


</VirtualHost>


ServerName my.site1.tld
DocumentRoot$WEBSERVER\u DOCROOT/my.site1.tld/www

最后,我可以让它工作了。我必须从中复制apache-site-default.conf的全部内容 添加到apachesite.conf并附加

定义WEBROOT$WEBSERVER\u DOCROOT

最后。 然后,在站点中的每个conf文件中,我可以检索值${webroot}。
我认为apache.conf会自动附加到默认的conf中,但事实并非如此。我本希望使用宏,但未能成功(添加RUN a2enmod宏和&a2enconf myvhost宏无效)。

最后,我可以让它工作。我必须从中复制apache-site-default.conf的全部内容 添加到apachesite.conf并附加

定义WEBROOT$WEBSERVER\u DOCROOT

最后。 然后,在站点中的每个conf文件中,我可以检索值${webroot}。
我认为apache.conf会自动附加到默认的conf中,但事实并非如此。我本希望使用宏,但未能成功(添加运行a2enmod宏和a2enconf myvhost宏无效)。

在DDEV Local v1.15+中,内置了使用Apache和Nginx执行多个docroot的功能。在.ddev/nginx_full和.ddev/apache目录中,甚至有一个例子显示了如何执行此操作。

在ddev Local v1.15+中,内置了使用apache和nginx执行多个docroot的功能。在.ddev/nginx_full和.ddev/apache目录中甚至有一个示例,精确地展示了如何执行此操作。

您知道添加配置的“常规”方法,对吗?-如果您使用这种技术(与您在这里所做的完全不同)$WEBSERVER\u DOCROOT被设置为DOCROOT的(容器内)路径,由config.yaml中的“DOCROOT”确定。也许你可以说出你想要实现的目标。第二个docroot?如果您试图添加一个额外的docroot,您可能可以这样做。docroot将是/var/www/html/path/to/second/docroot,在您的示例中可能是
DocumentRoot/var/www/html/www
?但是如果你不需要这样做,就不要这样做。ddev支持开箱即用的多个主机名和FQDN。正如我所说,我需要配置多个vHost以复制托管多个站点的真实web服务器:每个虚拟主机都有自己的docroot,实际上是$WEBSERVER_docroot的子目录。我给出了my.site1.tld的一个例子,但这里还有my.site2.tld,3等等。可以像文档中解释的那样在apache.conf中声明所有虚拟主机,但是$WEBSERVER\u DOCROOT仍然不可用。config.yaml中的docroot变量只是连接到默认根/var/www/html,结果应该可以通过自定义配置中的$WEBSERVER_docroot访问。事实并非如此。您知道添加配置的“正常”方式,对吗如果您使用这种技术(与您在这里所做的完全不同)$WEBSERVER\u DOCROOT被设置为DOCROOT的(容器内)路径,由config.yaml中的“DOCROOT”确定。也许你可以说出你想要实现的目标。第二个docroot?如果您试图添加一个额外的docroot,您可能可以这样做。docroot将是/var/www/html/path/to/second/docroot,在您的示例中可能是
DocumentRoot/var/www/html/www
?但是如果你不需要这样做,就不要这样做。ddev支持开箱即用的多个主机名和FQDN。正如我所说,我需要配置多个vHost以复制托管多个站点的真实web服务器:每个虚拟主机都有自己的docroot,实际上是$WEBSERVER_docroot的子目录。我给出了my.site1.tld的一个例子,但这里还有my.site2.tld,3等等。可以像文档中解释的那样在apache.conf中声明所有虚拟主机,但是$WEBSERVER\u DOCROOT仍然不可用。config.yaml中的docroot变量只是连接到默认的root/var/www/html,结果应该可以通过自定义配置中的$WEBSERVER\u docroot访问。事实并非如此。您可以发布一个配置示例吗?它不必有敏感信息。我会将标题改为“如何使用ddev和apache拥有多个docroots”,您可以将其作为要点发布,也可以在任何地方发布,但人们会希望看到您的示例。您有两种可能:1-只需在apache-site.conf的末尾附加虚拟主机(类似于上述问题中的示例)(这是apache site default的副本)。2-如果您想在站点中声明特定文件中的每个虚拟主机可用,就像在普通(干净)配置中一样,您必须通过Define将$WEBSERVER_ROOT放入apache变量中,并将其作为${variable}检索在conf文件中,使用docker文件添加文件并启用站点。下面是示例配置,您可以发布一个示例配置吗?它不必包含敏感信息。我将标题更改为“如何使用ddev和apache拥有多个docroot?”您可以将其作为要点发布,也可以发布在任何有用的地方,但人们会希望看到您的示例。您有两种可能性:1-只需将虚拟主机(类似于上述问题中的示例)附加到apache-site.conf的末尾(这是apache-site default的副本).2-如果您想在站点中的特定文件中声明每个虚拟主机可用,就像在正常(干净)配置中一样,您必须通过Define和ret将$WEBSERVER_ROOT放入Apache变量中