安装系统

CentOS release 6.8 (Final)

换腾讯yum源

cd /etc/yum.repos.d/
mkdir repo_bak && mv *.repo repo_bak

wget -O CentOS-Base.repo http://mirrors.cloud.tencent.com/repo/centos6_base.repo
yum clean all && rm -rf /var/cache/yum/*
yum repolist

安装vnc

yum list | grep vnc
yum -y install tigervnc-server

vncserver :1                            # 启动 vncserver
netstat -antulp | grep 5901             # 查看端口

安装noVNC

yum -y install git

cd /opt
git clone https://github.com/kanaka/noVNC

cd noVNC/utils/
openssl req -new -x509 -days 36500 -nodes -out self.pem -keyout self.pem # 创建证书

cd ..
./utils/launch.sh --vnc 127.0.0.1:5901		# 启动noVNC服务,需要python3环境

#-----------------------------------------------------------------------------------
# 安装pyhotn3
cd /usr/local/src
wget https://www.python.org/ftp/python/3.6.0/Python-3.6.0.tgz 
tar -xvf Python-3.6.0.tgz && cd Python-3.6.0
yum -y install gcc zlib* 
./configure --prefix=/usr/local/python && make && make install
file /usr/local/python/bin/python3.6
echo 'PATH=$PATH:/usr/local/python/bin' >> ~/.bashrc && source ~/.bashrc
which python3

#-----------------------------------------------------------------------------------
# 重新启动noVNC
cd /opt/noVNC
./utils/launch.sh --vnc 127.0.0.1:5901		# ssl模块报错
yum -y install openssl-devel 
cd /usr/local/src/Python-3.6.0/Modules
sed -i "205s/#//; 209s/#//; 210s/#//; 211s/#//; 212s/#//" Setup
cd /usr/local/src/Python-3.6.0
rm -rf /usr/local/python/
./configure --prefix=/usr/local/python && make && make install 
which python3

#-----------------------------------------------------------------------------------
# 再一次启动noVNC
cd /opt/noVNC
./utils/launch.sh --vnc 127.0.0.1:5901		# 完美运行


# 浏览器访问 http://<ip>:6080/vnc.html,输入VNC密码登录

关闭 SELinux 和防火墙

sed "s/SELINUX=.*/SELINUX=disabled/g" /etc/selinux/config && setenforce 0
iptables -I INPUT -p tcp --dport 6080 -j ACCEPT && service iptables save

# selinux 不关闭仍可正常运行,但是否影响其他功能不知
# 防火墙需要放行6080端口

高阶用法

# 以token.conf方式启动
cd /opt/noVNC
echo "test1: 127.0.0.1:5901" >> token.conf		# token中可以写入多个VNC地址

pip3 install python-numpy
./utils/websockify/websockify.py \
	--web /opt/noVNC \
	--target-config=/opt/noVNC/token.conf \
	8080 -D
# 浏览器访问 http://<ip>:8080/vnc.html?path=websockify/?token=test1

# 配置加密访问
cd /opt/noVNC
./utils/websockify/websockify.py \
	--web /opt/noVNC/ \
	--target-config=/opt/noVNC/token.conf \
	--cert /opt/noVNC/utils/self.pem \
	8080 -D
# 浏览器访问 https://<ip>:8080/vnc.html?path=websockify/?token=test1

使用 Nginx 反向代理 noVNC

cd /usr/local/src/
yum -y install gcc gcc-c++ zlib zlib-devel openssl openssl-devel pcre pcre-devel
wget http://nginx.org/download/nginx-1.10.2.tar.gz
tar -xvf nginx-1.10.2.tar.gz && nginx-1.10.2
./configure --prefix=/usr/local/nginx && make && make install
/usr/local/nginx/sbin/nginx -V
vim /usr/local/nginx/conf/nginx.conf
cd /usr/local/src/
yum -y install gcc gcc-c++ zlib zlib-devel openssl openssl-devel pcre pcre-devel
wget http://nginx.org/download/nginx-1.10.2.tar.gz
tar -xvf nginx-1.10.2.tar.gz && nginx-1.10.2
./configure --prefix=/usr/local/nginx && make && make install
/usr/local/nginx/sbin/nginx -V
vim /usr/local/nginx/conf/nginx.conf
map $http_upgrade $connection_upgrade {
	default upgrade;
	''      close;
}

server {
	listen       80;
	server_name  vnc.pub;
    
	location / {
		proxy_pass http://localhost:8080;
		rewrite ^/$ $1/vnc.html;
		proxy_http_version 1.1;
		proxy_set_header Upgrade $http_upgrade;
		proxy_set_header Connection $connection_upgrade;
	}
}
/usr/local/nginx/sbin/nginx -t
/usr/local/nginx/sbin/nginx
netstat -antulp | grep 80
# 客户端设置DNS解析
echo "vnc.pub 192.168.1.104" >> /etc/hosts
# 浏览器访问 http://vnc.pub/?path=websockify/?token=test1
# 只需放行 web 端口即可

需要注意

需要使用支持html5的浏览器访问,否则无效

本来想录视频来着,电脑实在带不动了