This is an automated email from the ASF dual-hosted git repository.

jscheffl pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airflow.git


The following commit(s) were added to refs/heads/main by this push:
     new af239855e76 Fix edge executor UI navigation when behind reverse proxy 
with subpath (#63777)
af239855e76 is described below

commit af239855e76fbf076fe226ee5fb044ab4965cef5
Author: Dheeraj Turaga <[email protected]>
AuthorDate: Tue Mar 17 14:38:22 2026 -0500

    Fix edge executor UI navigation when behind reverse proxy with subpath 
(#63777)
    
    The /api/v2/version call in NavTabs used a hardcoded absolute path,
      which 404s when Airflow is served under a subpath (e.g. /airflow/).
      This prevented the nav tabs from rendering, forcing users to navigate
      via inline table links that lacked relative=path, causing URLs to
      append instead of replace (e.g. /worker/jobs/worker/...).
---
 .../src/airflow/providers/edge3/plugins/www/src/layouts/NavTabs.tsx   | 3 ++-
 .../src/airflow/providers/edge3/plugins/www/src/pages/JobsPage.tsx    | 2 +-
 .../src/airflow/providers/edge3/plugins/www/src/pages/WorkerPage.tsx  | 4 ++--
 3 files changed, 5 insertions(+), 4 deletions(-)

diff --git 
a/providers/edge3/src/airflow/providers/edge3/plugins/www/src/layouts/NavTabs.tsx
 
b/providers/edge3/src/airflow/providers/edge3/plugins/www/src/layouts/NavTabs.tsx
index 070ad2a2643..6e534647f51 100644
--- 
a/providers/edge3/src/airflow/providers/edge3/plugins/www/src/layouts/NavTabs.tsx
+++ 
b/providers/edge3/src/airflow/providers/edge3/plugins/www/src/layouts/NavTabs.tsx
@@ -19,6 +19,7 @@
 import { Center, Flex } from "@chakra-ui/react";
 import axios from "axios";
 import { useQuery } from "@tanstack/react-query";
+import { OpenAPI } from "openapi/requests/core/OpenAPI";
 import { useRef, type ReactNode } from "react";
 import { NavLink } from "react-router-dom";
 
@@ -34,7 +35,7 @@ export const NavTabs = ({ tabs }: Props) => {
 
   const { data } = useQuery<{version: string, git_version: string | null}>({
     queryFn: async () => {
-      const res = await axios.get("/api/v2/version");
+      const res = await axios.get(`${OpenAPI.BASE}/api/v2/version`);
       return res.data;
     },
     queryKey: ["appVersion"],
diff --git 
a/providers/edge3/src/airflow/providers/edge3/plugins/www/src/pages/JobsPage.tsx
 
b/providers/edge3/src/airflow/providers/edge3/plugins/www/src/pages/JobsPage.tsx
index a2ce7213a3e..cf86d89dbdb 100644
--- 
a/providers/edge3/src/airflow/providers/edge3/plugins/www/src/pages/JobsPage.tsx
+++ 
b/providers/edge3/src/airflow/providers/edge3/plugins/www/src/pages/JobsPage.tsx
@@ -240,7 +240,7 @@ export const JobsPage = () => {
                   {job.queued_dttm ? <TimeAgo date={job.queued_dttm} 
live={false} /> : undefined}
                 </Table.Cell>
                 <Table.Cell>
-                  <Link 
to={`../worker#${job.edge_worker}`}>{job.edge_worker}</Link>
+                  <Link relative="path" 
to={`../worker#${job.edge_worker}`}>{job.edge_worker}</Link>
                 </Table.Cell>
                 <Table.Cell>
                   {job.last_update ? <TimeAgo date={job.last_update} 
live={false} /> : undefined}
diff --git 
a/providers/edge3/src/airflow/providers/edge3/plugins/www/src/pages/WorkerPage.tsx
 
b/providers/edge3/src/airflow/providers/edge3/plugins/www/src/pages/WorkerPage.tsx
index e91edee97e3..6f1758f2ef3 100644
--- 
a/providers/edge3/src/airflow/providers/edge3/plugins/www/src/pages/WorkerPage.tsx
+++ 
b/providers/edge3/src/airflow/providers/edge3/plugins/www/src/pages/WorkerPage.tsx
@@ -163,7 +163,7 @@ export const WorkerPage = () => {
                       <List.Root>
                         {worker.queues.map((queue) => (
                           <List.Item key={queue}>
-                            <Link 
to={`../jobs?queue=${encodeURIComponent(queue)}`}>{queue}</Link>
+                            <Link relative="path" 
to={`../jobs?queue=${encodeURIComponent(queue)}`}>{queue}</Link>
                           </List.Item>
                         ))}
                       </List.Root>
@@ -179,7 +179,7 @@ export const WorkerPage = () => {
                   </Table.Cell>
                   <Table.Cell>
                     {worker.jobs_active !== undefined && worker.jobs_active > 
0 ? (
-                      <Link 
to={`../jobs?worker=${encodeURIComponent(worker.worker_name)}`}>
+                      <Link relative="path" 
to={`../jobs?worker=${encodeURIComponent(worker.worker_name)}`}>
                         {worker.jobs_active}
                       </Link>
                     ) : (

Reply via email to