我想在一个域上服务多个django项目(实际上是django rest API应用程序),但每个服务都使用单独的url。像这样:
,依此类推。我将使用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;
}
}
答案 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 缓存(如果您之前已登录)。