Nginx設定反向代理WebSocket server的方式如下。
環境:
- nginx/1.25.3
設定
例如在本機有一台WebSocket server,WebSocket API路徑為http://localhost:8080
;而Nginx的位址為http://localhost:8081
。
開啟Nginx配置檔nginx.conf
,在http
區塊設定以下:
http {
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
}
map $http_upgrade $connection_upgrade
的作用是會根據變數http_upgrade
的值,依照block中的鍵來決定新變數connection_upgrade
的值;block內的default
的作用為若http_upgrade
的值沒有任何對應,則使用default對應的值;也就是說,當http_upgrade
的值為空時,則connection_upgrade
的值為close
;當當http_upgrade
的值為任意字串時,則connection_upgrade
的值為upgrade
。
在server
區塊設定以下:
server {
location ws/ {
proxy_pass http://localhost:8080/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
}
location /ws/
區塊設定反向代理的API路徑。
proxy_pass http://localhost:8080/
將nginx的ws/
路徑轉導至WebSocket server的WebSocket APIhttp://localhost:8080/
;
proxy_http_version 1.1
設定HTTP協議版本為1.1。
proxy_set_header Upgrade $http_upgrade
設定請求頭Upgrade
的值為變數http_upgrade
;
proxy_set_header Connection $connection_upgrade
設定請求頭Connection
的值為變數connection_upgrade
的值,根據上面的map設定,若變數http_upgrade
的值不為空,則connection_upgrade
的值為upgrade
。
下面為Nginx WebSocket proxy的全部設定。
http {
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
listen 8081;
server_name localhost;
location /ws/ {
proxy_pass http://localhost:8080/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
}
...
}
測試
在WebSocket client輸入Nginx的代理WebSocket API的位址ws://localhost:8081/ws/
,則此位址的請求會轉發為http://localhost:8080/
。
沒有留言:
張貼留言