You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为嵌入Dify应用的URL添加子路径并配置Ingress移除子路径

问题:嵌入Dify应用时添加子路径后出现404错误

在网页中嵌入Dify应用页面,因网络原因需在原iframe的src中添加proxy/dify子路径以路由至不同服务。原iframe与Ingress配置可正常访问,但添加该子路径并配置Ingress重写规则后出现default backend-404错误,开发者工具显示同时存在带与不带子路径的请求。推测可能是未修改iframe内部的src等内容,但不知其他实现方法,寻求解决办法。


原正常配置

iframe代码

<iframe
 src="http://my.com/chatbot/abcdefg"
 style="width: 100%; height: 100%; min-height: 700px"
 frameborder="0"
 allow="microphone">
</iframe>

Ingress配置

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/service-upstream: "true"
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
  name: proxy
spec:
  rules:
    - host: my.com
      http:
        paths:
          - path: /
            backend:
              serviceName: dify
              servicePort: 80

报错时的配置

iframe代码

<iframe
 src="http://my.com/proxy/dify/chatbot/abcdefg"
 style="width: 100%; height: 100%; min-height: 700px"
 frameborder="0"
 allow="microphone">
</iframe>

Ingress配置

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/service-upstream: "true"
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
    nginx.ingress.kubernetes.io/rewrite-target: /$1
    nginx.ingress.kubernetes.io/use-regex: "true"
    nginx.ingress.kubernetes.io/preserve-host: "true"
    nginx.ingress.kubernetes.io/enable-cors: "true"
  name: proxy
spec:
  rules:
    - host: my.com
      http:
        paths:
          - path: /proxy/dify/(.*)
            backend:
              serviceName: dify
              servicePort: 80

解决办法

1. 补充Ingress路径匹配规则

当前Ingress仅匹配带/proxy/dify前缀的请求,但Dify应用内部会用相对路径加载静态资源、发起API请求(比如/static/js/main.js、/api/chat),这些请求不带前缀,导致Ingress无法匹配返回404。需添加额外路径规则覆盖这类请求:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/service-upstream: "true"
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
    nginx.ingress.kubernetes.io/rewrite-target: /$1
    nginx.ingress.kubernetes.io/use-regex: "true"
    nginx.ingress.kubernetes.io/preserve-host: "true"
    nginx.ingress.kubernetes.io/enable-cors: "true"
  name: proxy
spec:
  rules:
    - host: my.com
      http:
        paths:
          # 处理带proxy/dify前缀的初始请求
          - path: /proxy/dify/(.*)
            backend:
              serviceName: dify
              servicePort: 80
          # 处理Dify内部发起的静态资源、API请求
          - path: /(static|api|chatbot)/(.*)
            backend:
              serviceName: dify
              servicePort: 80

2. 配置Dify的Base URL(推荐)

如果Dify支持配置Base URL,直接在应用配置中设置根路径前缀为/proxy/dify/,这样应用内部所有请求都会自动带上该前缀,无需额外Ingress规则。

以环境变量方式配置为例,给Dify服务添加:

BASE_URL=/proxy/dify/

重启Dify服务后,保持iframe的src为http://my.com/proxy/dify/chatbot/abcdefg即可正常访问,Ingress配置可沿用报错时的版本。

3. 独立Nginx反向代理(备选)

若Ingress配置受限,可在Dify服务前部署独立Nginx实例,配置反向代理规则覆盖所有请求:

server {
  listen 80;
  server_name my.com;

  # 处理带proxy/dify前缀的请求
  location /proxy/dify/ {
    rewrite ^/proxy/dify/(.*)$ /$1 break;
    proxy_pass http://dify-service:80/;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
  }

  # 处理Dify内部静态资源请求
  location /static/ {
    proxy_pass http://dify-service:80/static/;
  }

  # 处理Dify内部API请求
  location /api/ {
    proxy_pass http://dify-service:80/api/;
  }
}

内容的提问来源于stack exchange,提问作者moluzhui

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 16:40:57