我试图用nginx代理WebSocket + HTTPstream量。
我读过这个: http : //nginx.org/en/docs/http/websocket.html
我的configuration如下所示:
http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; gzip on; map $http_upgrade $connection_upgrade { default upgrade; '' close; } server { listen 80; server_name ourapp.com; location / { proxy_pass http://127.0.0.1:100; proxy_http_version 1.1; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; } } }
我有两个问题:
1)连接每分钟closures一次。
2)我想在同一个端口上运行HTTP和WS。 该应用程序在本地工作正常,但如果我尝试将HTTP和WS放在同一个端口上,并设置此nginx代理,我得到这个:
与'ws://ourapp.com/ws'的WebSocket连接失败:意外的响应代码:200
加载应用程序(HTTP)似乎工作正常,但WebSocket连接失败。
问题1:至于连接每分钟死一次,我意识到它是nginx超时变量。 我可以使我们的应用程序平时偶然或增加超时。 我不确定是否应该将它设置为0,我决定每分钟只ping一次,并将超时设置为90秒。 ( keepalive_timeout
)
问题2:使用CloudFlare CDN时出现连接问题。 禁用CloudFlare加速解决了这个问题。
或者我可以创建一个子域,并将其设置为“未加速”,并将其用于WS。