我有两个问题:
-
当我运行:
file_put_contents("/etc/apache2/sites-enabled/www.mydomain.com.conf",$vh);
我得到错误:
failed to open stream: Permission denied
-
我如何安全地
reload
apache(添加域后)从PHP。我不认为$res = shell_exec("sudo service apache2 reload")
是工作,我没有得到任何回报。
这是一个不好的做法,为什么你不去创建一个默认的虚拟主机,可以回答任何域名
在应用级别,你可以对它做一些保护。这样可以将代码缩短到最小。
他是一个例子(不要用它,需要测试):
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
<Directory /var/www/the_site>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
您肯定不希望像PHP那样做,但您可以尝试以下方法:修改sudoers文件以授予apache sudo单个命令的能力:
root ALL=(ALL) NOPASSWD:/usr/local/bin/php_add_vhost
然后创建一个可执行脚本(bash或php, python或其他),从特定位置读取数据,将其放入/etc目录并执行"service apache2 reload"。
这种方法有许多安全问题,但是如果您正在问这个问题,那么您可能无论如何都很好。