nginx-多个django应用程序相同的域具有不同的Urls

时间:2018-12-07 14:38:58

标签: django nginx django-rest-framework

我想在一个域上服务多个django项目(实际上是django rest API应用程序),但每个服务都使用单独的url。像这样:

  1. http://test.com/app1/ ...
  2. http://test.com/app2/ ...

,依此类推。我将使用nginx对其进行配置。但是我遇到了一些需要您帮助的问题:

  1. 这些应用彼此之间应具有不同的Cookie。因为他们有不同的身份验证系统。因此其中的令牌和cookie对另一令牌无效。如何处理?
  2. 您推荐哪些nginx配置。

注意:

我不想要详细信息,因为我知道概念。只是一些提示和有用的命令即可。

更新

例如,我有一个Django应用,其URL为test。我希望此路径在/app1/test的服务器上提供。问题在于,当将请求发送到/app1/test时,Django无法将其识别为/test,而不是/app1/test,并且因为/app1没有在urls中注册。py给出404错误。

这是我的nginx配置的示例:

server {
listen 80;
server_name test.com;

location /qpp1/ {
    include uwsgi_params;
    proxy_pass http://unix://home//app1.sock;
}

location /qpp2/ {
    include uwsgi_params;
    proxy_pass http://unix://home//app2.sock;
}
}

2 个答案:

答案 0 :(得分:1)

您可以尝试使用proxy_cookie_path指令:

server {

    ...

    location /app1/ {
        proxy_cookie_path / /app1/;
        proxy_pass http://backend1/;
    }

    location /app2/ {
        proxy_cookie_path / /app2/;
        proxy_pass http://backend2/;
    }
}

更新

这是要测试的另一种配置。

upstream qpp1 {
    server unix:/home/.../app1.sock;
}

upstream qpp2 {
    server unix:/home/.../app2.sock;
}

server {
    listen 80;
    server_name test.com;

    location /qpp1/ {
        include uwsgi_params;
        proxy_cookie_path / /qpp1/;
        proxy_pass http://qpp1/;
    }

    location /qpp2/ {
        include uwsgi_params;
        proxy_cookie_path / /qpp2/;
        proxy_pass http://qpp2/;
    }
}

答案 1 :(得分:0)

因为我没有使用 nginx,所以 django 的 SESSION_COOKIE_PATH-Variable 是我的解决方案。

https://docs.djangoproject.com/en/3.1/ref/settings/#session-cookie-path

在您的示例中,您可以将其设置为:

应用 1

SESSION_COOKIE_PATH = "/app1/"

app2

SESSION_COOKIE_PATH = "/app2/"

之后在浏览器中清除域的 cookie 缓存(如果您之前已登录)。