通过 CNAME 设置新的白标服务时出现问题

Problems setting up a new whitelabel service via 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 服务器上做些什么来解决这个问题吗?

非常感谢!

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

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

2) 当计算机有主机名的IP地址时,它连接到端口80(在HTTP的情况下)或端口443(在[=46=的情况下) ]HTTPS) 并请求页面 app.anotherwebsite.com;

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

在你的例子中,你的 CPANEL 是你的 default 虚拟主机,这就是它显示它的原因。

因此,要让您的 SASS 在这种情况下工作,您可以将 default 虚拟主机更改为您的应用程序或者你可以添加一个带通配符的虚拟主机,比如 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(如果有PHP在 Apache 中启用)文件。

使用标签 授予 /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