fix: Web GUI je vracao 404 iza nginx prefiksa
Flask slusa na rootu, a nginx ga proxira na ${GUI_PATH} (/guacadmin/).
Bez SCRIPT_NAME-a svi redirecti i url_for pozivi generirali su putanje
izvan prefiksa - / je redirectao na /login, sto nginx ne poznaje, pa je
GUI bio potpuno nedostupan (404 odmah nakon otvaranja).
Dodan PrefixMiddleware koji postavlja SCRIPT_NAME iz nove GUI_PATH
env varijable; systemd unit je sad prosljedjuje. Isto primijenjeno na
webgui/app.py i na inline kopiju u install.sh.
Provjereno: /guacadmin/ -> /guacadmin/login -> login -> /guacadmin/dashboard
(200), svi navigacijski linkovi ostaju pod prefiksom.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
+23
@@ -644,6 +644,28 @@ NGINX_CONFS = ['/etc/nginx/sites-available/guacamole',
|
||||
app = Flask(__name__, template_folder='templates')
|
||||
app.secret_key = os.environ.get('SECRET_KEY', secrets.token_hex(32))
|
||||
|
||||
|
||||
class PrefixMiddleware:
|
||||
"""Nginx proxira GUI_PATH (npr. /guacadmin/) na Flask koji slusa na
|
||||
rootu. Bez SCRIPT_NAME-a url_for i redirecti generiraju putanje izvan
|
||||
prefiksa (/login umjesto /guacadmin/login) i nginx vraca 404."""
|
||||
|
||||
def __init__(self, wsgi_app, prefix=''):
|
||||
self.wsgi_app = wsgi_app
|
||||
prefix = (prefix or '').strip('/')
|
||||
self.prefix = '/' + prefix if prefix else ''
|
||||
|
||||
def __call__(self, environ, start_response):
|
||||
if self.prefix:
|
||||
environ['SCRIPT_NAME'] = self.prefix
|
||||
path = environ.get('PATH_INFO', '')
|
||||
if path.startswith(self.prefix):
|
||||
environ['PATH_INFO'] = path[len(self.prefix):] or '/'
|
||||
return self.wsgi_app(environ, start_response)
|
||||
|
||||
|
||||
app.wsgi_app = PrefixMiddleware(app.wsgi_app, os.environ.get('GUI_PATH', ''))
|
||||
|
||||
def load_config():
|
||||
if os.path.exists(CONFIG_FILE):
|
||||
with open(CONFIG_FILE) as f:
|
||||
@@ -1713,6 +1735,7 @@ User=root
|
||||
WorkingDirectory=${WEBGUI_DIR}
|
||||
Environment=PORT=${GUI_PORT}
|
||||
Environment=SECRET_KEY=${GUI_SECRET}
|
||||
Environment=GUI_PATH=${GUI_PATH}
|
||||
ExecStart=${WEBGUI_DIR}/venv/bin/python3 ${WEBGUI_DIR}/app.py
|
||||
Restart=on-failure
|
||||
RestartSec=5
|
||||
|
||||
Reference in New Issue
Block a user