我有一个后端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 调用。
我在 java 后端也遇到了同样的问题。即使客户端关闭了连接,连接仍继续打开。您找到关闭 nginx-ingress 和服务之间连接的方法了吗?