天天看點

Nginx反向代理 VSCode Server :Websocket 自動關閉(code:1006)

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;
    }
}
           

繼續閱讀