如果我希望我的帐户持有人能够拥有自己的子域名,甚至是他们自己的域名。使用NGINX作为我的代理服务器,我应该在NGINX conf中为每个域创建域名,并让我的客户在那里指出他们的域名,还是有理由说这会是坏事?另外,如果我这样做,我如何通过请求传递特定于帐户的(Django DB中的帐户)信息(即,从www.spamfoosaccount.com请求到我的服务器,所以我将请求代理回Apache,但是如何我的应用程序是否知道它来自spamfoo的帐户,除非我查看request.HTTP_HOST(这可能是最好的方式,但在我问之前我不知道)。提前致谢。
答案 0 :(得分: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"]
。如果此值与任何域匹配,则用户链接到,没关系,该值可能是伪造的,但仍然是由链接到该域的用户。