![如何允许用户使用自己的域名访问他们的页面](https://linux22.com/image/802042/%E5%A6%82%E4%BD%95%E5%85%81%E8%AE%B8%E7%94%A8%E6%88%B7%E4%BD%BF%E7%94%A8%E8%87%AA%E5%B7%B1%E7%9A%84%E5%9F%9F%E5%90%8D%E8%AE%BF%E9%97%AE%E4%BB%96%E4%BB%AC%E7%9A%84%E9%A1%B5%E9%9D%A2.png)
我打算使用 Django 1.5 建立一个相册网站。我想为我的会员提供的功能之一是使用他们自己的域名。
www.albumn123.com/用户/mike
www.mike.com
现在,网站几乎准备好了。但对于域名部分我还是一无所知。我认为我不可能只通过编码来完成它。我认为我必须在服务器中进行一些配置。这就是我在这里发布问题的原因。
请给我指出正确的方向,让我知道应该如何开始。如果可能的话,我想使整个过程自动化。
我的开发堆栈:
Unbuntu 12.04
Django 1.5
Gunicorn 是服务器。
答案1
通配符虚拟主机 + CNAME
这种方法有两个部分。由于我不是程序员,我将对服务器端进行评论。
Apache WildCard 虚拟主机
您可以通过将服务器名称或别名设置为“*”在 Apache 中配置通配符虚拟主机。
<VirtualHost 0.0.0.0:80>
ServerName domain.com
ServerAlias *
...
</VirtualHost>
这将使此虚拟主机成为所选 IP 地址上任何虚拟主机的默认主机。如果您在服务器上托管多个网站,我建议您将此虚拟主机放在其自己的 IP 上。
别名记录
对于自定义域名,您可以让您的客户输入 CNAME 以将其自定义域映射到您的域。
www.user.com CNAME www.albumn123.com
应用程序逻辑
然后,您的应用程序将需要获取环境变量或主机标头,然后提供正确的网站。此外,请务必处理不存在的域并规范化您的 URL(www.domain.com 与 domain.com),以使事情更易于管理。
是的,您可以使用 RewriteRules 来执行此操作,但根据我的经验,它扩展性不佳,而且如果您必须重新组织文件系统,则会很麻烦。
答案2
我对 Gunicorn 不是特别熟悉,但如果它的工作方式与 Apache(和其他几个服务器)类似,它应该接受指向它的所有域的请求。然后由您在代码中检测请求的域是什么并进行相应的处理。
例如,在 PHP 中,您可以使用$_SERVER['HTTP_HOST']
来查找请求的域名,然后根据域名构建页面。您必须在某处进行映射,以将任意域名链接到您的用户。