我在 Google Cloud 上使用 Kubernetes 部署了一个 Meteor 应用程序,并配置了 Nginx 作为 SSL 终止。一切正常。
但是,如果两个不同的客户端连接到两个不同的 SSL 容器,则更新在长达 10 秒的时间内不会显示在各自的应用程序上,这使得 Websockets 看起来不起作用,但轮询正在生效。我已经确认所有客户端都与 Websockets 连接,但由于更新不会立即传播,可能 Nginx 未配置为与 Meteor 应用程序正确通信。
这是我的 SSL/Nginx 服务:
apiVersion: v1
kind: Service
metadata:
name: frontend-ssl
labels:
name: frontend-ssl
spec:
ports:
- name: http
port: 80
targetPort: 80
- name: https
port: 443
targetPort: 443
selector:
name: frontend-ssl
type: LoadBalancer
loadBalancerIP: 123.456.123.456
sessionAffinity: ClientIP
这是 Meteor 服务:
apiVersion: v1
kind: Service
metadata:
name: frontend
labels:
name: frontend
spec:
ports:
- port: 3000
targetPort: 3000
selector:
name: flow-frontend
type: LoadBalancer
loadBalancerIP: 123.456.123.456
sessionAffinity: ClientIP
对于 SSL 终止,我使用 Kubernetes 建议的 SSL 设置,并添加了 Websocketshttps://github.com/markoshust/nginx-ssl-proxy https://github.com/markoshust/nginx-ssl-proxy
在您的 NginX 配置中,您是否确保使用ip_hash
标记每次将 websocket 定向到同一服务器?您还需要确保转发 websocket Upgrade 标头:
upstream meteorapp{
ip_hash;
server hostname:port
}
server {
# your server stuff here
#
location / {
proxy_pass http://meteorapp;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto http;
proxy_redirect http:// $scheme://;
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)