我正在尝试实施一个系统,以便更安全地更新和测试我的网站更新。这个想法是有两个虚拟主机,一个指向生产版本,另一个指向开发版本。然后,当更新获得批准后,我可以重新配置虚拟主机,以切换网站是生产版本还是开发版本。当不积极进行开发时,可以使用以下方法禁用该主机a2dissite
我想将网站迁移所需的更改减少到尽可能少的行数,以减少迁移过程中出错的可能性。我想到了一个解决方案,只需更改一行即可:
<VirtualHost *:443>
ServerName mydomain.com
ServerAlias www.mydomain.com
Define current_site lambda
ServerAdmin [email protected]
DocumentRoot /var/www/html/mydomain.com/site_${current_site}/
[...]
# Set environment variables for PHP code.
SetEnv ENVIROMENT production
SetEnv CURRENT_SITE ${current_site}
[...]
</VirtualHost>
开发站点文件如下所示:
<VirtualHost *:443>
ServerName beta.mydomain.com
<If "%{current_site} == 'lambda'">
Define beta_site gamma
</If>
<Else>
Define beta_site lambda
</Else>
ServerAdmin [email protected]
DocumentRoot /var/www/html/mydomain.com/site_${beta_site}/
[...]
# Set environment variables for PHP code.
SetEnv ENVIROMENT development
SetEnv CURRENT_SITE ${beta_site}
[...]
</VirtualHost>
当我使用以下方法检查时,apachectl configtest
我的开发文件中出现错误,指出Cannot parse condition clause: Variable 'current_site' does not exist
。Apache 文档说
该变量始终是全局定义的,并且不限于周围配置部分的范围。
这让我相信,只要我的生产文件首先被处理,变量就应该被定义。起初我以为这可能是一个处理顺序错误,所以我检查了文档,发现包括apache 默认配置中的指令引入已启用的站点使用字母顺序。我使生产站点的 conf 文件以 000 开头,以便首先处理它,但仍然出现错误。我误解了什么或做错了什么?