如何从客户的域名加载我的应用程序

如何从客户的域名加载我的应用程序

我正在构建一个托管在 的 SAAS 产品,并且我将拥有一些拥有域名、等的abc.com客户。client1.comclient2.orgclient3.in

现在我想向每个客户端在其域上提供我的应用程序,例如client1.com/app,,client2.com/appclient3/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 吗?

相关内容