Nginx
從 Nginx 反向代理的 Django ASGI 伺服器重定向到錯誤的子目錄
我正在嘗試將 Etebase 安裝在我的 Nginx 網路伺服器的子目錄中。(我還在這個伺服器上的一個單獨的子目錄中執行一個 Pi-hole 儀表板。) Etebase 是一個使用 ASGI 的 Django 應用程序。我使用 Uvicorn 作為上游 ASGI 網路伺服器。
我已經成功地反向代理了 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
看起來該路線被視為相對路徑而不是絕對路徑。這將解釋附加而不是替換的路徑。
原因可能是您的
--root-path
論點中缺少前導斜杠。試試這個:
/home/eteserver/etebase/.venv/bin/uvicorn etebase_server.asgi:application --uds /tmp/etebase_server.sock --root-path /etesync