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
代码的情况: