首页 > 解决方案 > 通过 CNAME 设置新的白标服务时出现问题

问题描述

我有一个 SAAS,并试图允许其他人在他们自己的域中使用我的 SAAS。因此,假设我的网站是 app.example.com(使用 Apache 托管并使用 PHP 作为后端语言),我希望允许某人从 app.anotherwebsite.com 提供我的网站。

我已经在 app.anotherwebsite.com 上创建了一个 CNAME:

app.anotherwebsite.com CNAME app.example.com.

但是,如果我访问 app.anotherwebsite.com,它会在 app.anotherwebsite.com/cgi-sys/defaultwebpage.cgi 上加载默认的 cPanel 页面。

我已经尝试了网络上提供的许多解决方案,但都没有成功。有谁知道如何解决这个问题?我必须在 example.com 服务器上做些什么来解决这个问题吗?

非常感谢!

标签: phpapache.htaccessdnscname

解决方案


当您创建CNAME并尝试向其发出HTTP请求时,计算机会执行以下操作:

1)尝试发现与您的主机名相关的IP(在本例中为app.anotherwebsite.com),CNAME它是另一个主机名的别名,需要指向一个IP地址;

2)当电脑有主机名的IP地址时,连接80端口(HTTP情况下)或443端口(HTTPS情况下),请求页面app.anotherwebsite.com

3)您在 IP 地址的HTTP服务器将在其配置中搜索与app.anotherwebsite.com匹配的虚拟主机。如果没有配置与请求的主机名匹配的虚拟主机,它将为默认虚拟主机提供服务。在 Apache,如果没有明确声明的默认虚拟主机,则配置的第一个虚拟主机将被选为默认主机。

在您的情况下,您的CPANEL是您的默认虚拟主机,这就是它显示它的原因。

因此,为了让您的SASS在这种情况下工作,您可以将默认虚拟主机更改为您的应用程序,或者您可以添加带有通配符的虚拟主机,例如app.*。它将接收请求的主机名(在 PHP 中,您可以以 $_SERVER["SERVER_NAME"] 的形式访问它)。

下面是一个示例代码:

<?php
echo "Hello!<br />\n";
echo "<br />\n";
echo "I'm seeing you're requesting the hostname " . $_SERVER["SERVER_NAME"] . "!\n";
?>

您的代码可以处理此信息并根据该变量为您的客户提供服务。

编辑:

您可以使用以下代码在 Apache 上添加虚拟服务器:

<VirtualHost *:80>
  ServerName app.example.com
  ServerAlias app.*
  DocumentRoot /var/www/SASS

  <Directory /var/www/SASS>
    Options -Indexes +FollowSymLinks +MultiViews
    AllowOverride All
    Require all granted
  </Directory>

  ErrorLog ${APACHE_LOG_DIR}/SASS-error.log
  CustomLog ${APACHE_LOG_DIR}/SASS-access.log combined
</VirtualHost>

这个 Apache 虚拟主机添加了一个名为app.example.com的新服务器,并且还将匹配app.*请求。

服务器将指向/var/www/SASS作为根目录,查找 index.html 或 index.php(如果在 Apache 上启用了 PHP)文件。

使用标签 <Directory> 授予的/var/www/SASS权限不允许自动创建没有索引文件的目录的索引文件,并允许使用.htaccess

此外,还创建了一个单独的 error_log 和 access_log 来记录与此条目匹配的请求。

要检查您的 Apache 配置并查找所有虚拟主机,请使用以下命令:

apachectl -t -D DUMP_VHOSTS

这将产生如下输出:

VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:80                   is a NameVirtualHost
         default server cpanel.example.com (/etc/httpd/conf/httpd.conf:994)
         port 80 namevhost cpanel.example.com (/etc/httpd/conf/httpd.conf:994)
         port 80 namevhost app.example.com (/etc/httpd/conf/httpd.conf:1044)
                 wild alias app.*
Syntax OK

推荐阅读