Dilemma: realtime create virtual hosts or with a crontab?
我正在开发一个主机托管控制面板与代码点火器。到现在为止,一直都还不错。:)
现在我正在研究一个创建虚拟主机的解决方案。创建虚拟主机的shell脚本可以工作,所以我的第一个想法是每隔15分钟在cronjob中启动该脚本。那应该管用。
但不是每15分钟就有一个新的虚拟主机要创建。所以,我认为每15分钟重新加载Apache配置非常重要。
顺便说一句,在CodeIgniter方面,它只是生成一个简单的文本文件,其中包含该新虚拟主机所属的值。
那么,是否有一个节省的解决方案来实时进行呢?我的猜测是,这是实时使用shell_exec()的唯一方法,但这不是一种节省方法。
我必须说我的shell scipting非常新手,所以可能有一种方法可以触发if或else语句来选择创建虚拟主机或什么都不做。但我该怎么做呢?那我就不需要实时做了。
这是我的shell脚本:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | #!/bin/bash vhroot='/etc/apache2/sites-available/' NEW_DOMAINS="/home/domain.txt" cat ${NEW_DOMAINS} | \ while read domain user email do echo"<VirtualHost *:80> ServerName "$domain" ServerAlias www."$domain" ServerAdmin"$email" DocumentRoot /home/"$user"/domains/"$domain"/public_html </VirtualHost>"> $vhroot/$domain #mkdir /home/$user/domains/domain #mkdir /home/$user/domains/$domain/public_html #chown -R $user.$user /home/$user/domains/$domain echo"111.21.111.111 $domain">> host.txt #a2ensite $hostname done echo""> /home/domain.txt # /etc/init.d/apache2 reload |
我希望有人能为这个问题找到一个简单但有效的解决办法。
非常有用。我做了一个新版本的脚本,它也删除了vhost,查找另一个.txt文件。文档根文件夹存储在/var/www/html/websites中。根据需要进行更改。脚本还检查变量$DOMAIN是否为空,以确保脚本不会在域名出错时运行。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 | #!/bin/bash vhroot='/etc/apache2/sites-available/' NEW_DOMAINS="adddomain.txt" has_new_domains=false #No new domains by default = do not reload the apache config. cat ${NEW_DOMAINS} | \ while read domain do if [ ! -z"$domain" ]; then has_new_domains=true #true = at least one new domain = reload apache config echo"<VirtualHost *:80> ServerName "$domain" ServerAlias www."$domain" ServerAdmin postmaster@"$domain" DocumentRoot /var/www/html/websites/"$domain" </VirtualHost>"> $vhroot/"$domain".conf #.conf extension needed to make a2ensite work in apache -debian mkdir /var/www/html/websites/ mkdir /var/www/html/websites/$domain chown -R root:www-data /var/www/html/websites chmod -R 755 /var/www/html/websites #create index.html file echo"<!DOCTYPE html> <html> <head> Welcome to nginx on Debian! <style> body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> <body> Welcome to"$domain" <p> If you see this page, the Apache web server is successfully installed and working. </p> <p> You can start building your website </p> </body> </html>">/var/www/html/websites/$domain/index.html #echo"111.21.111.111 $domain">> host.txt a2ensite"$domain".conf else echo 'No new domains' fi done > adddomain.txt # with echo"" an empty line is still present in file DEL_DOMAINS="deldomain.txt" cat ${DEL_DOMAINS} | \ while read deldomain do has_new_domains=true #true = at least one new domain = reload apache config #Make sure we don't delete all parent directory , in case variable is empty if [ ! -z"$deldomain" ]; then a2dissite"$deldomain".conf echo"dominio"$deldomain" eliminado" rm -r /var/www/html/websites/$deldomain rm $vhroot/"$deldomain".conf fi done > deldomain.txt if $has_new_domains ; then #only reload the apache config if there is at least one new domain /etc/init.d/apache2 reload fi |
您可以向脚本中添加一个bool变量,并且仅在添加了新的vhost时重新启动Web服务器。
未经测试的:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | #!/bin/bash vhroot='/etc/apache2/sites-available/' NEW_DOMAINS="/home/domain.txt" has_new_domains=false #No new domains by default = do not reload the apache config. cat ${NEW_DOMAINS} | \ while read domain user email do has_new_domains=true #true = at least one new domain = reload apache config echo"<VirtualHost *:80> ServerName "$domain" ServerAlias www."$domain" ServerAdmin"$email" DocumentRoot /home/"$user"/domains/"$domain"/public_html </VirtualHost>"> $vhroot/$domain #mkdir /home/$user/domains/domain #mkdir /home/$user/domains/$domain/public_html #chown -R $user.$user /home/$user/domains/$domain echo"111.21.111.111 $domain">> host.txt #a2ensite $hostname done echo""> /home/domain.txt if $has_new_domains ; then #only reload the apache config if there is at least one new domain /etc/init.d/apache2 reload fi |
顺便说一句:我希望