Nginx websocket的入口支持

Nginx websocket的入口支持,nginx,kubernetes,websocket,jetty,kubernetes-ingress,Nginx,Kubernetes,Websocket,Jetty,Kubernetes Ingress,我有一个jettyweb应用程序在k8s下运行。此web应用程序有一个websocket端点。部署的服务通过https上的nginx入口公开 一切正常,我让web应用程序运行,WebSocket工作正常(即推送和接收消息),但WebSocket关闭时出现1006错误代码,老实说,这并没有阻止我的代码工作,但看起来也不太好 websocket已公开@/notifications。在“正常”配置中,即不是k8s,只是安装在VM上的普通软件,我需要将以下内容添加到nginx.conf location

我有一个
jetty
web应用程序在
k8s
下运行。此web应用程序有一个websocket端点。部署的服务通过
https
上的
nginx
入口公开

一切正常,我让web应用程序运行,WebSocket工作正常(即推送和接收消息),但WebSocket关闭时出现
1006
错误代码,老实说,这并没有阻止我的代码工作,但看起来也不太好

websocket已公开@
/notifications
。在“正常”配置中,即不是
k8s
,只是安装在VM上的普通软件,我需要将以下内容添加到
nginx.conf

location /notifications {
   proxy_pass http://XXX/notifications;
   proxy_read_timeout 3700s;
   proxy_http_version 1.1;
   proxy_set_header Upgrade $http_upgrade;
   proxy_set_header Connection "Upgrade";
   proxy_set_header Origin '';
}
我试着通过入口这样做

nginx.ingres.kubernetes.io/configuration-snippet:|

  location /notifications {
    proxy_pass http://webapp:8080/notifications;
    proxy_http_version 1.1;
    proxy_set_header Upgrade "websocket";
    proxy_set_header Connection "Upgrade";
  }
但它没有效果,即我检查了生成的
nginx.conf
,没有添加这样的块

以前有人遇到过这样的问题吗?关于如何解决
1006
问题的任何线索?

1006
含义 根据
1006
是指:

用于指示在预期状态代码时连接异常关闭(即未发送关闭帧)

也看到

无论是在服务器上还是在客户端,都有很多可能的原因

客户端错误:请重试 要隔离和调试客户端错误,可以使用

至于服务器错误 码头 与码头相关的讨论如下:。但它不包含任何解决方案

用于
golang
服务器代码的比赛检测器 如果您的服务器是在
golang
上编写的,您可以尝试

数据竞争是并发系统中最常见和最难调试的错误类型之一。当两个goroutine同时访问同一个变量,并且至少有一个访问是写入时,就会发生数据争用。有关详细信息,请参阅

下面是一个可能导致崩溃和内存损坏的数据竞争示例:

func main() {
  c := make(chan bool)
  m := make(map\[string\]string)
  go func() {
      m\["1"\] = "a" // First conflicting access.
      c <- true
  }()
  m\["2"\] = "b" // Second conflicting access.
  <-c
  for k, v := range m {
      fmt.Println(k, v)
  }
}
PHP的案例code 这里讨论的
PHP
代码的情况:

1006
含义 根据
1006
是指:

用于指示在预期状态代码时连接异常关闭(即未发送关闭帧)

也看到

无论是在服务器上还是在客户端,都有很多可能的原因

客户端错误:请重试 要隔离和调试客户端错误,可以使用

至于服务器错误 码头 与码头相关的讨论如下:。但它不包含任何解决方案

用于
golang
服务器代码的比赛检测器 如果您的服务器是在
golang
上编写的,您可以尝试

数据竞争是并发系统中最常见和最难调试的错误类型之一。当两个goroutine同时访问同一个变量,并且至少有一个访问是写入时,就会发生数据争用。有关详细信息,请参阅

下面是一个可能导致崩溃和内存损坏的数据竞争示例:

func main() {
  c := make(chan bool)
  m := make(map\[string\]string)
  go func() {
      m\["1"\] = "a" // First conflicting access.
      c <- true
  }()
  m\["2"\] = "b" // Second conflicting access.
  <-c
  for k, v := range m {
      fmt.Println(k, v)
  }
}
PHP的案例code 这里讨论的
PHP
代码的情况: