关于Nginx+websocket 400问题

说明

用beego + nginx 在ubuntu上搭建了一个聊天服务器,使用websocket进行聊天交互, 测试没问题,但是放到nginx上之后,访问网站 发现不能进行websocket操作,提示400的问题

解决方法

在nginx配置文件 加上这几句话

map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;

map $http_upgrade $connection_upgrade {
        default upgrade;
        ''  close;
    }
server {
        ...
        location /chat/ {
            proxy_pass http://backend;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection $connection_upgrade;
}

原因

since the “Upgrade” is a hop-by-hop header, it is not passed from a client to proxied server. 链接地址。
另附 常用的HTTP请求头与响应头

注意:

设置完后 默认有一个连接超时时间60s,相当于我的聊天程序 如果某个人在60s秒内 没有说话 websocket 连接 就会自动断开!

因此 在nginx上需要配置[proxy_read_timeout]

proxy_read_timeout 360s; //6分钟时间

最后reload nginx

你可能感兴趣的:(关于Nginx+websocket 400问题)