我正在尝试将 Etebase 安装在我的 Nginx Web 服务器的子目录中。(我还在这个服务器上的单独子目录中运行 Pi-hole 仪表板。)Etebase 是一个使用 ASGI 的 Django 应用程序。我使用 Uvicorn 作为上游 ASGI Web 服务器。
我已成功反向代理 Etebase 服务器dan9er.internal/etesync
。直接转到 dan9er.internal/etesync
显示“成功了!”页面。
但是,重定向未得到正确处理。dan9er.internal/etesync/admin/
重定向到dan9er.internal/etesync/admin/etesync/admin/login/?next=etesync/admin/
。它是添加目录,而不是/etesync/
像我在其他问题中看到的那样删除目录。(直接前往dan9er.internal/etesync/admin/login/
就可以了。)
我该如何修复这个问题dan9er.internal/etesync/admin/login/?next=etesync/admin/
?我需要在 Uvicorn、Etebase 或 Nginx 中修改某些内容吗?
Nginx 配置:
upstream etebase {
server unix:///tmp/etebase_server.sock;
}
# ...
location /etesync/ {
proxy_pass http://etebase/;
proxy_redirect off;
# proxy_set_header stuff...
}
# ...
Etebase 配置(Django):
[global]
secret_file = secret.txt
debug = false
static_root = /home/eteserver/etebase/static/
media_root = /home/eteserver/etebase/media/
[allowed_hosts]
allowed_host1 = dan9er.internal
[database]
engine = django.db.backends.sqlite3
name = db.sqlite3
启动命令:
/home/eteserver/etebase/.venv/bin/uvicorn etebase_server.asgi:application --uds /tmp/etebase_server.sock --root-path etesync
摘自 Nginx 日志(前端服务器,代理字符串已删除):
192.168.0.204 - - [08/Mar/2021:20:07:06 -0500] "GET /etesync/admin/ HTTP/1.1" 302 0 "-"
192.168.0.204 - - [08/Mar/2021:20:07:06 -0500] "GET /etesync/admin/etesync/admin/login/?next=etesync/admin/ HTTP/1.1" 404 159 "-"
摘自 Uvicorn 日志(上游服务器):
Mar 08 20:07:06 dan9er-pi3 uvicorn[23360]: INFO: - "GET etesync/admin/ HTTP/1.1" 302 Found
Mar 08 20:07:06 dan9er-pi3 uvicorn[23360]: INFO: - "GET etesync/admin/etesync/admin/login/?next=etesync/admin/ HTTP/1.1" 404 Not Found
答案1
看起来该路线被视为相对路径而非绝对路径。这可以解释路径被附加而不是被替换的原因。
原因可能是你的--root-path
论点中缺少一个前导斜杠。
尝试一下:
/home/eteserver/etebase/.venv/bin/uvicorn etebase_server.asgi:application --uds /tmp/etebase_server.sock --root-path /etesync