如何允许客户端中止信号通过 Nginx 入口控制器以进行 SSE 流事件?

问题描述 投票:0回答:1

我有一个后端Python Flask 服务器和一个前端react.js Web 应用程序。我有一个网络流 API,我在客户端上使用

fetch
。我还希望客户端能够终止连接。我能够让它在本地工作。然而,在生产中,后端服务器位于 nginx 入口控制器后面。客户端中止调用不会传播到 Flask 服务器,并且连接对服务器保持打开状态,这不是所需的行为。

我尝试添加

nginx.ingress.kubernetes.io/configuration-snippet: |
      proxy_ignore_client_abort off;

到入口 yaml 文件。完整代码如下:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: external-ingress
  namespace: staging
  annotations:
    cert-manager.io/acme-challenge-type: dns01
    cert-manager.io/acme-dns01-provider: route53
    cert-manager.io/cluster-issuer: "letsencrypt"
    nginx.ingress.kubernetes.io/tls-acme: 'true'
    nginx.ingress.kubernetes.io/force-ssl-redirect: 'true'
    nginx.ingress.kubernetes.io/configuration-snippet: |
      proxy_ignore_client_abort off;
spec:
  rules:
  - host: app.personal.org
    http:
      paths:
      - backend:
          service:
            name: app-personal-org-api
            port:
              number: 5000
        path: /api
        pathType: ImplementationSpecific
      - backend:
          service:
            name: app-personal-org-ui
            port:
              number: 80
        path: /
        pathType: ImplementationSpecific
  tls:
  - hosts:
    - app.personal.org
    secretName: app-personal-org-tls

然而,运气不佳。即使从前端终止,呼叫仍保持活动状态

在前端,我正在使用

const controller = new AbortController()
const signal = controller.signal

然后将此信号传递给 fetch 调用。

streaming fetch-api kubernetes-ingress nginx-ingress server-sent-events
1个回答
0
投票

我在 java 后端也遇到了同样的问题。即使客户端关闭了连接,连接仍继续打开。您找到关闭 nginx-ingress 和服务之间连接的方法了吗?

© www.soinside.com 2019 - 2024. All rights reserved.