我正在构建一个托管在 的 SAAS 产品,并且我将拥有一些拥有域名、等的abc.com
客户。client1.com
client2.org
client3.in
现在我想向每个客户端在其域上提供我的应用程序,例如client1.com/app
,,client2.com/app
client3/com/app
我不想将我的代码托管在他们的服务器上。我的网站上只有 1 个基本代码和 1 个数据库abc.com
。所以我的整个应用程序都应该在他们的域上运行
问题是,我该如何配置它?我的意思是client.com
将指向他们的服务器,但client.com/app
将使用他们自己域的基本 URL 从我的服务器执行我的应用程序?
谢谢..
答案1
我能想到的最简单的方法是使用 mod_proxy(如果在客户端域上使用 apache)
http://httpd.apache.org/docs/2.2/mod/mod_proxy.html
另一种方法是使用 php 脚本代理数据:
<?php
$opts = array(
'http'=>array(
'method'=>"GET",
'header'=>"Accept-language: en\r\n" .
"Cookie: foo=bar\r\n"
)
);
$context = stream_context_create($opts);1
/* Sends an http request to www.example.com
with additional headers shown above */
$fp = fopen('http://www.example.com/app?q='.$_GET['q], 'r', false, $context);
fpassthru($fp);
fclose($fp);
?>
如果您可以添加 .htaccess,我建议使用 .htaccess 将应用程序中的所有内容重定向到类似以下内容:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
您可能需要进行一些调整才能将其驻留在 /app 中。然后您的包装器脚本必须学会以不同的方式将 q=$1 变量传递给主机。我的示例非常原始,并且没有检查错误。
我还会针对每个站点发送一个固定查询,并附带域名。这样,您的应用就更容易解读它的来源,而不必依赖 IP 地址等。此外,您还必须处理会话,因为如图所示的包装器不会将 cookie 一直传递到客户端并返回。而 abc.com 域只会看到托管包装器脚本的服务器的 IP。
答案2
如果您要求您的客户端设置 DNS 域 app.client1.com,并将其指向您的服务器,这将是一个更干净、更不引人注目的方法。无需代理或类似的东西。
或者您能详细说明为什么需要 client1.com/app/ URI 吗?