快速连接中心
🔌 原生 noVNC
直接连接到 WebSocket 代理的 VNC 服务,最轻量级的方案。
🥑 Apache Guacamole
企业级无客户端远程桌面网关,支持 RDP/VNC/SSH 多协议。
⚡ 快速跳转
预设常用 VNC 服务入口,适用于已配置好的环境。
实现方案对比
- 纯 HTML5/JavaScript 实现
- 无需浏览器插件
- 支持 WebSocket 传输
- Canvas 渲染高性能
- 仅支持 VNC 协议
- 无内置音频支持
- 需配合 websockify
- 支持 RDP/VNC/SSH 协议
- 集中式连接管理
- LDAP/AD 集成
- 会话录制与审计
- 文件传输支持
- 剪贴板共享
- 部署复杂度高
- 针对 3D/视频优化
- 支持 TLS 1.2+ 加密
- JPEG/ZRLE 压缩
- X11 会话共享
- Java Web 客户端
- 配置较复杂
- macOS/Win 服务端已停止维护
- 硬件加速视频编码
- 内置音频传输
- 多人协作控制
- Docker 容器化部署
- 比 VNC 更流畅的视频体验
- 资源占用较高
- 相对较新的技术栈
典型部署架构
理解数据流是部署成功的关键。以下是两种主流架构的工作流程:
方案 A: noVNC + websockify (轻量级)
方案 B: Apache Guacamole (企业级)
快速部署指南
1. Docker 快速启动 noVNC
# 启动 TigerVNC + noVNC 组合
docker run -d --name vnc \
-p 6080:6080 -p 5900:5900 \
-v /dev/shm:/dev/shm \
consol/ubuntu-xfce-vnc
访问 http://localhost:6080 即可使用。
2. Nginx 反向代理配置
# /etc/nginx/conf.d/novnc.conf
location /websockify {
proxy_pass http://localhost:6080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 86400;
}
关键:必须启用 WebSocket 支持以实现实时传输。
3. 系统服务化 (systemd)
# /etc/systemd/system/websockify.service
[Unit]
Description=Websockify for noVNC
After=network.target
[Service]
Type=simple
ExecStart=/usr/bin/websockify \
6080 localhost:5900
Restart=always
确保开机自启:systemctl enable websockify
安全提示
生产环境务必使用 WSS (WebSocket Secure) 并配合 Nginx SSL 终止。 建议将 VNC 服务绑定到 127.0.0.1,仅通过 WebSocket 代理暴露。 考虑使用 fail2ban 防止暴力破解 VNC 密码。