【问题标题】:Wildcard domains in Ubuntu 14.14Ubuntu 14.14 中的通配符域
【发布时间】:2015-02-26 22:02:14
【问题描述】:

我在 ubuntu VPS 上有一个 SSL 域,我希望所有子域都指向一般 example.com,例如:site1.example.com、site2.example.com 以从 example.com 加载代码。

我知道如何使用虚拟主机来做到这一点,但我不想每次都添加新的虚拟主机并重新启动 apache。

所以我阅读了“Willcard 域”,但我无法设置它。还阅读了我必须添加这个虚拟主机定义“ServerAlias *.example.com”和一些我必须添加区域记录或类似这样的东西.

<VirtualHost IP:443>

VirtualDocumentRoot /var/www/example.com/public/

SSLEngine on
SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite 
SSLCertificateFile 
SSLCertificateKeyFile 
SSLCertificateChainFile 

ServerAlias *.example.com
Options Indexes FollowSymLinks MultiViews
</VirtualHost>

我是网络服务器的初级人员,所以任何详细的步骤都会有所帮助。

【问题讨论】:

    标签: apache configuration wildcard-subdomain


    【解决方案1】:

    首先,您必须拥有通配符 SSL 证书并安装它。它们与标准 SSL 证书不同。一方面,它们要贵得多。您可以创建一个自签名的,但这仅适用于测试。

    更正,我误会了。如果要将所有子域重定向到父域,则不需要通配符 SSL。仅当您还想要具有 SSL 的唯一子域时才需要它。

    接下来你已经有了 ServerAlias *.example.com

    最后,您需要为每个子域配置 CNAME DNS 记录,以将子域指向父 example.com。我强烈建议您在开始尝试更改 DNS 设置之前彻底研究这一点。有些更改可能会持续很长时间,即使您再次更改它们。我不知道您使用什么来管理您的 DNS,因此我无法提供具体信息,如果您对自己的工作不满意,我也不鼓励您进行此类更改。您可以一次破坏您的网站 DNS 数天。也就是说,只要你不弄乱任何现有的东西,这实际上并不是很困难。

    在 CPanel 中,我可以为通配符子域配置 DNS 记录,例如..

    • 名称:subdomain.example.com。
    • TTL:14400
    • 类型:CNAME
    • 记录:example.com

    【讨论】:

    • 我已经安装了 webmin ,我想我可以在那里配置这个 *.example.com 记录。但我不知道怎么做。
    • 如何添加此类记录以及此区域文件在哪里,或者我是否可以在 webmin 界面中执行此操作。
    • 如果你有一个合适的虚拟主机,他们可能已经有一个 DNS 管理器。你需要使用那个。只有当您正在制作自己的网络服务器时,您才能自己设置。如果您尝试为您在 microdesign-web.com 的个人资料中列出的网站设置子域,那么您已经拥有 CPanel。那里有一个 DNS 区域编辑器工具。 microdesign-web.com/cpanel
    • 不,不是,那是为我的 VPS 主机上的客户而设,并且只安装了 webmin。我对 cPanels 没有问题,但这是另一种想法 :)
    • 请帮帮我,我可以在哪里添加这个区域记录。
    【解决方案2】:
    <VirtualHost *:443>
    
    ServerAdmin x@xxx.org
    ServerAlias  *.yourdomain.net
    #ServerName could be any non-exist sub-domain 
    ServerName   blabla.bla.yourdomain.net
    
    ServerSignature On
    SSLEngine On
    SSLCertificateFile path_of_your_cert
    SSLCertificateKeyFile path_of_your_key
    SSLCACertificateFile path_of_your_intermediate_cert
    SSLProtocol all -SSLv2 -SSLv3
    SSLHonorCipherOrder On
    
    DirectoryIndex index.html index.php index.htm
    DocumentRoot /yourWebRoot
    
    RewriteEngine On
    RewriteMap lowercase int:tolower
    # Disable access to domains like "a.b.yourdomain.net"
    RewriteCond %{HTTP_HOST} ^(.*)\.(.*)\.yourdomain\.net$
    RewriteRule ^.*$ - [R=502,L]
    # Rewrite sub.yourdomain.net to folder /yourWebRoot/sub
    RewriteCond %{HTTP_HOST} ^(.*)\.yourdomain\.net$
    RewriteRule ^(.*)$ /yourWebRoot/${lowercase:%1}/$1
    RewriteRule (.*)/icons/(.*) /usr/share/apache2/icons/$2 [L]
    
    DirectoryIndex  index.php index.htm index.html
    
    </VirtualHost>
    

    如果您希望您的子域都进入同一个文档根文件夹,请在我的示例 conf 中删除所有这些重写。

    ServerName 是 conf 文件中的必备项

    如果您没有通配符 ssl(70$-1000$ 美元/年),请使用 rewrite 将所有其他域重定向到主域。 (但这可能会导致 cookie/postdata 泄漏)

    【讨论】:

    • 这是一个更简单的解决方案,可以伪造它而不是弄乱 DNS,但是重写将子域重定向到子文件夹,这不是 OP 所要求的。
    • 这表示“无效命令 'RewriteEngine',可能拼写错误或由未包含在服务器配置中的模块定义”
    • 我的 mod_rewrite 已启用,没有 mod_rewrite 我无法运行 Laravel,但@FyzzyLogic 是对的,我不需要你提供的这个解决方案
    猜你喜欢
    • 2016-10-01
    • 2020-08-23
    • 1970-01-01
    • 2023-03-05
    • 2012-01-23
    • 1970-01-01
    • 2010-09-09
    • 1970-01-01
    • 2019-03-18
    相关资源
    最近更新 更多