php - 通过 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端口(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
推荐阅读
- php - 使用 PHP OpenSSL 解密 rijndael-128 字符串返回空
- css - CSS3:同时使用 SCSS 和 CSS 变量
- c++ - 如何使用带有配置文件的可执行二进制文件运行 gprof2dot.py?
- html - BrowserStack:Mac 和 iOS 所有浏览器都不允许在内联块元素的父级上滚动
- c++ - memcpy 写入“类 uint256”类型的对象
- javascript - 通过引导表单击单元格不起作用
- elasticsearch - PUT 映射 API 覆盖 Elasticsearch 中的现有映射
- go - 如何将 map[string]interface{} 转换为 io.Reader
- deep-learning - 深度学习静态+动态特征:什么时候使用静态作为动态的方法与多输入网络更好?
- postgresql - 如何在 Google Cloud SQL PostgreSQL 实例中配置 pg_trgm 相似度阈值参数