在恢复服务器的过程中,get 到的一个小知识:因为所有的服务都是通过 nginx 代理出来的。而默认配置下并没有对 ws 进行代理。

WS的全称是WebSocket,Nginx配置WebSocket也比较简单,只需要在nginx.conf文件中进行相应的配置。这种方式很简单,但是很有效,能够横向扩展WebSocket服务端的服务能力。

这里直接贴代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
# 如果$http_upgrade 不为 '' (空), 则$connection_upgrade 为 upgrade 。
# 如果$http_upgrade 为 '' (空), 则 $connection_upgrade 为 close。
server{
...

location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Range $http_range;
proxy_set_header If-Range $http_if_range;
proxy_redirect off;
proxy_pass http://immich_server:2283;
# the max size of file to upload
client_max_body_size 20000m;
# 下面这两行是关键
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
# proxy_set_header Upgrade $http_upgrade; 表示设置Upgrade不变
# proxy_set_header Connection $connection_upgrade; 表示如果 $http_upgrade为upgrade,则请求为upgrade(websocket),如果不是,就关闭连接
}
}