首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多站点服务器配置中的Apache控件

多站点服务器配置中的Apache控件
EN

Stack Overflow用户
提问于 2021-07-27 00:40:33
回答 2查看 119关注 0票数 0

我有一个运行lamp堆栈的ubunto vm,目前,一个域名重定向到vm的ip地址。概念明智的主要原则是,我希望用户注册一个帐户,并得到一个“网站”运行在我自己的域名的一个子域。使用apache、vhosts等中的通配符子域,以及使用certbot,我可以自动地在ssl下保护所有的子域。

现在,如果客户想要购买他/她自己的域名,通过我或其他注册商,他们需要将A记录指向我的ip地址,并将来自www的CNAME指向域名。在我的终端,我需要在sites-available文件夹下添加一个vhost文件,为新域名配置虚拟主机文件,然后“优雅地”重新启动apache。

这就是问题所在。我如何操作apache、vhosts、文件等,这样我只需在我的主网站上按一下按钮就可以完成这些操作?我在后台使用PHP,在php (shell、exec等)中做这件事似乎有安全风险。

我在GCP上运行,所以GCP的任何服务都是可用的。

提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-07-29 15:45:15

回答我自己的问题:

在apache中启用了mod_macros;

代码语言:javascript
复制
sudo a2enmod macro

新增一个用于创建http :80虚拟主机的宏,另一个用于创建带有必要变量的https :443虚拟主机的宏;

代码语言:javascript
复制
<Macro ProtectedVHost $domain>
    <VirtualHost *:80>
        ServerAdmin admin@email.com
        ServerName $domain
        ServerAlias www.$domain

        DocumentRoot /var/www/customer_sites/$domain/public_html

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        RewriteEngine on
        RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
    </VirtualHost>

    <IfModule mod_ssl.c>
        <VirtualHost *:443>
            ServerName $domain
            ServerAlias www.$domain
            ServerAdmin admin@email.com

            DocumentRoot /var/www/customer_sites/$domain/public_html

            ErrorLog ${APACHE_LOG_DIR}/error.log
            CustomLog ${APACHE_LOG_DIR}/access.log combined

            SSLEngine on
            SSLCertificateFile /etc/letsencrypt/live/$domain/fullchain.pem
            SSLCertificateKeyFile /etc/letsencrypt/live/$domain/privkey.pem
            Include /etc/letsencrypt/options-ssl-apache.conf
        </VirtualHost>
    </IfModule>
</Macro>

在我的主网站上的public_html文件夹中创建了一个conf文件,可以在php中编辑,当用户添加到他的域中时,我使用自己的宏来添加记录:

代码语言:javascript
复制
Use {Macro Name} {Domain Name}

将该文件导入apache.conf

最后,我创建了一个经常启动的CRON,读取该文件并将其与已保存的版本进行比较。如果文件已更改,它将优雅地重新启动apache,apache将读取并重新创建必要的虚拟主机。

我希望这对任何想做同样事情的人有所帮助

票数 0
EN

Stack Overflow用户

发布于 2021-07-28 22:02:10

如果您担心服务器中的shell脚本,您可以使用SSH从另一台计算机运行应用程序;应用程序可以是一个小实例,比如只能在windows上使用的putty。你应该找到一些与Linux相关的东西,因为有很多替代方案可供选择。使用SSH客户端应用程序和Python语言将其自动化。

由于手动过程涉及多次运行同一命令,因此您可以创建虚拟主机文件,并查看文件是否在站点可用目录等中创建。

一旦新用户注册了您的服务,您就需要创建虚拟主机文件并运行chown命令,查看这些文件是否从目录在站点中创建,然后重新启动apache。您可以参考自动化virtual host setup on your server中的步骤。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68533559

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档