如果我希望我的帐户持有者能够拥有他们自己的子域,甚至是他们自己的域。使用NGINX作为我的代理服务器,我是否应该在我的NGINX conf中为每个人创建域名,并让我的客户将他们的域名指向那里,或者这是不好的原因吗?此外,如果我这样做了,我如何通过请求(即,从www.spamfoosaccount.com到我的服务器的请求)传递特定于帐户的信息( Django DB中的帐户),所以我将请求代理回Apache,但是我的应用程序如何知道它来自spamfoo的帐户,除非我查看request.HTTP_HOST (这可能是最好的方法,但我直到询问才知道)。提前谢谢。
发布于 2010-02-17 22:22:57
要知道请求来自哪个域,您必须使用request.META["HTTP_HOST"]
。
但是,不要依赖此值进行身份验证,它很容易被伪造。使用django.contrib.session
时,身份验证应该以通常的方式进行。来自特定域/子域的请求不应具有更多特权/权限,即使该请求包含经过身份验证的会话。应将权限授予用户/用户组,而不是域。
请注意,浏览器会话不能跨越二级域(例如,来自foo.com的会话cookie不会被发送到bar.com),但它可以是所有子域的*.foo.com cookie (如果您明确设置)。
让你的用户将他们的DNS记录指向你的服务器的IP,让NGINX根据域名将请求路由到你的后端,并在Django中进行正常的身份验证。
你的问题:
我的应用程序如何知道它来自spamfoo的帐户
我不知道你的应用程序的细节,但请求来自哪里并不重要,重要的是谁发出了请求(例如,一个经过身份验证的用户)。您应该有一个模型/字段将您的用户链接到他们各自的域。当用户仅链接到一个域时,应用程序应假定该用户来自该域。当用户连接到多个域时,您可以查看request.META["HTTP_HOST"]
。如果这个值与任何一个域匹配,用户就会被链接到,这没关系,这个值可能是伪造的,但仍然是由链接到该域的用户伪造的。
https://stackoverflow.com/questions/2240812
复制相似问题