1

如果我希望我的帐户持有人能够拥有自己的子域,甚至完全拥有自己的域。使用 NGINX 作为我的代理服务器,我是否应该在我的 NGINX conf 中为每个域创建域并让我的客户将他们的域指向那里,或者有什么原因会导致这种情况变坏?此外,如果我这样做,我如何将特定帐户(Django DB 中的帐户)信息与请求(即,来自 www.spamfoosaccount.com 的请求到我的服务器)一起传递,所以我将请求代理回 Apache,但是如何我的应用程序是否知道它来自 spamfoo 的帐户,除非我查看 request.HTTP_HOST (这可能是最好的方法,但直到我问我才知道)。提前谢谢。

4

1 回答 1

1

要知道请求来自哪个域,您必须使用request.META["HTTP_HOST"].

但是,不要依赖此值进行身份验证,它很容易被伪造。身份验证应该以通常的方式使用django.contrib.session. 来自特定域/子域的请求不应具有更多特权/权限,即使请求包含经过身份验证的会话。权限应该授予用户/用户组,而不是域。

请注意,浏览器会话不能跨二级域(例如,来自 foo.com 的会话 cookie 不会发送到 bar.com),但是它可以是所有子域的 *.foo.com cookie(如果您明确设置它)。

让您的用户将他们的 DNS 记录指向您服务器的 IP,让 NGINX 将基于域的请求路由到您的后端,并在 Django 中进行正常的身份验证。

你的问题:

我的应用程序如何知道它来自 spamfoo 的帐户

我不知道您的应用程序的细节,但是请求来自哪里并不重要,但是谁发出请求(例如经过身份验证的用户)。您应该有一个模型/字段将您的用户链接到他们各自的域。当用户仅链接到一个域时,应用程序应假定用户来自该域。当用户连接到多个域时,您可以查看request.META["HTTP_HOST"]. 如果此值与任何域匹配,则用户链接到,没关系,该值可能是伪造的,但仍然是链接到该域的用户。

于 2010-02-17T14:22:57.460 回答