ubuntu 安装vncserver和novncproxy(不需要客户端的网页版,使用websocket实现)
要在 OpenStack 主机上安装并使用自定义的 noVNC proxy(而不是 OpenStack 默认的 nova-console),去连接 虚拟机实例内部启动的 VNC 服务,你可以通过手动部署 noVNC + websockify 来实现。
✅ 场景说明
你希望的架构是:
浏览器
│
▼
主机上的 noVNC proxy(websockify)
│
▼
实例内部运行的 VNC 服务器(如 x11vnc)
🧰 所需组件
在 OpenStack 主机上:
- ✅ noVNC
- ✅ websockify(VNC WebSocket 转发器)
- ✅ 可选:x11vnc/tigervnc-server 需运行在每个实例内部
🛠 步骤详解
① 在实例内部运行 VNC 服务
在每个虚拟机实例中安装并启动 VNC server(例如 x11vnc):
sudo apt update
sudo apt install x11vnc -y
x11vnc -display :0 -forever -nopw -rfbport 5901
② 在 OpenStack 主机安装 noVNC 和 websockify
# 安装依赖
sudo apt install git python3-websockify -y
# 下载 noVNC
cd /opt
sudo git clone https://github.com/novnc/noVNC.git
cd noVNC
sudo git checkout v1.4.0 # 或最新稳定版本
③ 运行 websockify 代理 VNC 服务
🧩 方法 1:单端口直连(每个实例独立监听)
# 连接实例 A(10.0.0.11:5901),将它映射到 host:6081
./utils/launch.sh --vnc localhost:6081 --listen 0.0.0.0:6081 -- \
websockify 6081 10.0.0.11:5901
然后访问:
http://<host>:6081/vnc.html?host=<host>&port=6081
🧩 方法 2:路径路由多个实例(推荐)
1. 创建一个 /opt/novnc/targets.cfg 文件:
/vm1: 10.0.0.11:5901
/vm2: 10.0.0.12:5901
2. 启动 websockify:
websockify 6080 --target-config=/opt/novnc/targets.cfg --web /opt/noVNC
3. 访问链接(浏览器):
http://<host>:6080/vnc.html?path=/vm1
http://<host>:6080/vnc.html?path=/vm2
④ 配置防火墙(可选)
确保 OpenStack 主机允许外部访问 6080 或其他 websockify 端口:
sudo ufw allow 6080/tcp
也要确保虚拟机实例允许访问它的 5901 端口(从主机发起即可)。
🔐 可选增强
- 为 websockify 设置密码代理或认证反向代理(如 Nginx)
- 用 HTTPS 加密访问
- 使用 systemd 启动 websockify 服务
- 自动从 nova 实例元数据中提取 IP 并生成 targets.cfg(可脚本化)
✅ 总结
| 步骤 | 内容 |
|---|---|
| 实例内部 | 安装并运行 x11vnc、tigervnc 或其他 VNC server |
| 主机安装 | Git 安装 noVNC,系统安装 websockify |
| 代理设置 | 用 websockify 将浏览器请求转发到对应实例的 VNC 端口 |
| 浏览器访问 | 使用 vnc.html?path=/vm1 等方式连接多个实例 |

浙公网安备 33010602011771号