nginx配置中,在443端口配了ssl证书,基于nginx代理地址访问websocket服务异常。
后端项目,使用SpringBoot框架,并基于spring自带的websocket功能开启了websocket服务。
在连接socket地址的时候发现,直连服务地址没问题,但是通过nginx代理地址连接异常,有如下报错:
1
2
|
websocket Error: write EPROTO 66931976:error:100000f7:SSL routines:OPENSSL_internal:WRONG_VERSION_NUMBER:../../../../src/third_party/boringssl/src/ssl/tls_record.cc:242:
...
|
经过对比排查后发现,nginx代理的 location 块配置有问题。
解决
原来的 location 配置:
1
2
3
4
5
6
7
8
9
10
|
location /api/ {
proxy_pass http://x.x.x.x:8080;
proxy_read_timeout 1200;#设置等待后台响应时间
proxy_next_upstream error timeout invalid_header http_500 http_503 http_404;
proxy_cookie_path / /;
client_max_body_size 1000m;
proxy_set_header Host $proxy_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
}
|
修改后的 location 配置:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
location /api/ {
proxy_pass http://x.x.x.x:8080;
proxy_read_timeout 1200;#设置等待后台响应时间
proxy_next_upstream error timeout invalid_header http_500 http_503 http_404;
proxy_cookie_path / /;
client_max_body_size 1000m;
proxy_set_header Host $proxy_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection \"upgrade\";
}
|