NGINX 反向代理 VSCode Server 出現錯誤 :Websocket 自動關閉(code:1006)
實際上是Nginx 缺少 WebSocket 代理的原因
解決方案 : HTTP的Upgrade協定頭機制用于将連接配接從HTTP連接配接更新到WebSocket連接配接,Upgrade機制使用了Upgrade協定頭和Connection協定頭
示例 vscode.conf 完整配置如下:
upstream vscode {
server 127.0.0.1:9000; #VSCode Server
}
#VSCode Server Err:1006 解決方案: https://www.cnblogs.com/qianxunman/p/13656874.html
#Nginx WebDSocket 代理 : https://blog.csdn.net/chszs/article/details/26369257
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
# another virtual host using mix of IP-, name-, and port-based configuration
server {
listen 19000;
location / {
proxy_pass http://vscode;
#proxy_pass http://192.168.1.154:8080;
#Proxy Settings https://www.cnblogs.com/wangzhisdu/p/7771069.html
#Timeout Setting https://www.cnblogs.com/lianhaifeng/p/13525844.html
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 "Upgrade";
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_max_temp_file_size 0;
proxy_connect_timeout 60; #nginx與upstream server的連接配接逾時時間(機關:s)
proxy_send_timeout 90; #nginx發送資料至 upstream server逾時, 預設60s, 如果連續的60s内沒有發送1個位元組, 連接配接關閉
proxy_read_timeout 90; #nginx接收 upstream server資料逾時, 預設60s, 如果連續的60s内沒有收到1個位元組, 連接配接關閉
proxy_buffer_size 4k; #代理請求緩存區_這個緩存區間會儲存使用者的頭資訊以供Nginx進行規則處理_一般隻要能儲存下頭資訊即可
proxy_buffers 4 32k; #同上 告訴Nginx儲存單個用的幾個Buffer最大用多大空間
proxy_busy_buffers_size 64k; #如果系統很忙的時候可以申請更大的proxy_buffers 官方推薦*2
proxy_temp_file_write_size 64k; #proxy緩存臨時檔案的大小
#proxy_temp_path /usr/local/nginx/temp; #用于指定本地目錄來緩沖較大的代理請求
}
location ~.*\.(js|css|html|png|jpg)$ {
expires 3d;
}
}