625 lines
19 KiB
Markdown
625 lines
19 KiB
Markdown
# Web 远程桌面 HTTPS 配置指南(新手完整版)
|
||
|
||
本指南帮助你从零配置 HTTPS,实现手机/平板通过浏览器访问远程桌面。
|
||
|
||
## 方案架构图
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────────────────────────────────┐
|
||
│ 互联网 │
|
||
│ │
|
||
│ ┌──────────┐ ┌─────────────────────────────────────────────┐ │
|
||
│ │ 手机 │ │ 公网服务器 (Linux/Windows) │ │
|
||
│ │ 平板 │ HTTPS │ ┌─────────────┐ ┌─────────────────┐ │ │
|
||
│ │ 电脑 │ ──────── │ │ Nginx │ ──── │ FRP Server │ │ │
|
||
│ │ (浏览器) │ :8080 │ │ (SSL证书) │ :9000│ (frps) │ │ │
|
||
│ └──────────┘ │ └─────────────┘ └────────┬────────┘ │ │
|
||
│ │ 域名: your.domain.com │ │ │
|
||
│ └────────────────────────────────┼────────────┘ │
|
||
│ │ │
|
||
│ TCP 隧道 │
|
||
│ │ │
|
||
└───────────────────────────────────────────────────────────┼────────────────┘
|
||
│
|
||
┌───────────────────────────────────────────────────────────┼────────────────┐
|
||
│ 本地网络 │ │
|
||
│ │ │
|
||
│ ┌─────────────────────────────────────┐ │ │
|
||
│ │ Windows 电脑 (主控) │ │ │
|
||
│ │ ┌─────────────┐ ┌─────────────┐ │ ┌────────────▼───────────┐ │
|
||
│ │ │ Yama │───│ FRP Client │◄─┼───│ FRP 隧道 │ │
|
||
│ │ │ Web服务 │ │ (frpc) │ │ └────────────────────────┘ │
|
||
│ │ │ :9000 │ └─────────────┘ │ │
|
||
│ │ └──────┬──────┘ │ │
|
||
│ └─────────┼───────────────────────────┘ │
|
||
│ │ │
|
||
│ │ 远程控制 │
|
||
│ ▼ │
|
||
│ ┌──────────────────────────────────────────────────────────────────┐ │
|
||
│ │ 被控设备 (支持 Windows / Linux) │ │
|
||
│ │ │ │
|
||
│ │ ┌───────────┐ ┌───────────┐ ┌───────────┐ ┌───────────┐ │ │
|
||
│ │ │ Windows A │ │ Windows B │ │ Linux A │ │ Linux B │ ... │ │
|
||
│ │ └───────────┘ └───────────┘ └───────────┘ └───────────┘ │ │
|
||
│ └──────────────────────────────────────────────────────────────────┘ │
|
||
│ │
|
||
└───────────────────────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
**数据流向**:手机浏览器 → HTTPS → Nginx → FRP Server → FRP Client → Yama → 被控设备
|
||
|
||
---
|
||
|
||
## Web 远程桌面的优势
|
||
|
||
### 随时随地,即开即用
|
||
|
||
- **无需安装客户端** - 打开浏览器就能用,手机、平板、任意电脑都行
|
||
- **跨平台支持** - iOS、Android、Windows、Mac、Linux 通吃
|
||
- **移动办公** - 出差、外出时用手机就能处理紧急事务
|
||
|
||
### 多人协作,团队共享
|
||
|
||
- **多人同时在线** - 传统 Windows 客户端一人使用时他人无法登录,Web 端支持多人同时访问
|
||
- **权限分离** - 不同成员可同时监控不同设备,互不干扰
|
||
- **便于展示** - 分享链接即可让同事/客户查看,无需安装任何软件
|
||
|
||
### 降低成本,提升效率
|
||
|
||
- **零部署成本** - 无需在每台电脑上安装客户端软件
|
||
- **快速响应** - 收到告警通知,掏出手机就能处理
|
||
- **安全加密** - HTTPS 传输,数据安全有保障
|
||
|
||
---
|
||
|
||
## 前置条件
|
||
|
||
在开始配置前,请确认你已具备以下条件:
|
||
|
||
| 条件 | 说明 | 必需 |
|
||
|------|------|------|
|
||
| **Yama 程序授权** | 需要有效的软件授权才能使用 Web 功能 | ✅ |
|
||
| **Windows 电脑** | 用于运行 Yama 主控程序(见下方说明) | ✅ |
|
||
| **公网服务器** | 用于运行 FRP + Nginx,需有固定公网 IP | ✅ |
|
||
| **域名** | 用于申请 HTTPS 证书,可购买或免费获取 | ✅ |
|
||
|
||
> 💡 **关于 Windows 电脑**:Yama 主控程序需要在 Windows 上运行。如果你的公网服务器是 Windows 系统,可以直接在上面运行 Yama;如果公网服务器是 Linux,则需要另外准备一台 Windows 电脑。
|
||
|
||
### 没有这些条件?
|
||
|
||
如果你有 Web 远程桌面的需求,但缺少上述条件,欢迎联系作者:
|
||
|
||
- **咨询方案** - 我们可以提供服务器、域名等一站式解决方案
|
||
- **购买授权** - 获取 Yama 程序授权,解锁全部功能
|
||
- **技术支持** - 协助完成配置,快速上手使用
|
||
|
||
📬 **Telegram**:[@doge_grandfather](https://t.me/doge_grandfather)
|
||
|
||
---
|
||
|
||
## 目录
|
||
|
||
1. [为什么需要 HTTPS](#1-为什么需要-https)
|
||
2. [技术准备](#2-技术准备)
|
||
3. [获取域名](#3-获取域名)
|
||
4. [配置域名解析](#4-配置域名解析)
|
||
5. [申请 SSL 证书](#5-申请-ssl-证书)
|
||
6. [安装配置 Nginx](#6-安装配置-nginx)
|
||
7. [配置 FRP](#7-配置-frp)
|
||
8. [启动服务](#8-启动服务)
|
||
9. [手机访问测试](#9-手机访问测试)
|
||
10. [常见问题](#10-常见问题)
|
||
|
||
---
|
||
|
||
## 1. 为什么需要 HTTPS
|
||
|
||
浏览器出于安全考虑,H264 视频解码功能只能在**安全上下文**中使用:
|
||
|
||
| 访问方式 | H264 远程桌面 |
|
||
|----------|---------------|
|
||
| `https://任意地址` | ✅ 支持 |
|
||
| `http://localhost` 或 `http://127.0.0.1` | ✅ 支持 |
|
||
| `http://其他地址`(包括内网 IP、公网 IP、域名) | ❌ 不支持 |
|
||
|
||
**简单说:**
|
||
- **没有 HTTPS** → 只能在本机浏览器访问(localhost)
|
||
- **配置 HTTPS** → 手机、平板、其他电脑都能访问
|
||
|
||
如果用 HTTP 从非本机访问,会提示:
|
||
```
|
||
Browser does not support H264: VideoDecoder not available
|
||
```
|
||
|
||
本指南帮你配置 HTTPS,实现随时随地访问。
|
||
|
||
---
|
||
|
||
## 2. 技术准备
|
||
|
||
确认你已完成以下准备:
|
||
|
||
| 项目 | 说明 |
|
||
|------|------|
|
||
| FRP 基础配置 | 已配置好 FRP 内网穿透(frps 在服务器运行,frpc 在本机运行) |
|
||
| SSH 工具 | 如 PuTTY、Xshell、Windows Terminal,用于连接服务器执行命令 |
|
||
| Yama Web 服务 | 已在 Yama 中启用 Web 服务(菜单 → 设置 → Web 服务) |
|
||
|
||
> 💡 如果还没配置 FRP,请先参考 FRP 官方文档完成基础配置。
|
||
|
||
**最终架构:**
|
||
|
||
```
|
||
手机浏览器 ──HTTPS──> 你的域名:端口 ──> Nginx ──> FRP ──> 你的电脑
|
||
```
|
||
|
||
---
|
||
|
||
## 3. 获取域名
|
||
|
||
### 方案一:购买域名(推荐)
|
||
|
||
便宜的域名一年只要几块钱:
|
||
|
||
| 注册商 | 网址 | 说明 |
|
||
|--------|------|------|
|
||
| 阿里云 | https://wanwang.aliyun.com | 国内,需实名 |
|
||
| 腾讯云 | https://dnspod.cloud.tencent.com | 国内,需实名 |
|
||
| Cloudflare | https://www.cloudflare.com | 国外,无需实名 |
|
||
| Namesilo | https://www.namesilo.com | 国外,便宜 |
|
||
|
||
> 💡 **提示**:`.icu`、`.top`、`.xyz` 等后缀很便宜,首年通常 ¥5-10。
|
||
|
||
### 方案二:免费域名
|
||
|
||
| 服务 | 网址 | 说明 |
|
||
|------|------|------|
|
||
| DuckDNS | https://www.duckdns.org | 免费子域名,如 `xxx.duckdns.org` |
|
||
| No-IP | https://www.noip.com | 免费子域名 |
|
||
| Freenom | https://www.freenom.com | 免费顶级域名(不稳定) |
|
||
|
||
---
|
||
|
||
## 4. 配置域名解析
|
||
|
||
将域名指向你的**公网服务器 IP**。
|
||
|
||
### 4.1 登录域名管理面板
|
||
|
||
去你购买域名的网站,找到「DNS 解析」或「域名解析」。
|
||
|
||
### 4.2 添加 A 记录
|
||
|
||
| 字段 | 填写 |
|
||
|------|------|
|
||
| 记录类型 | A |
|
||
| 主机记录 | `@`(代表根域名)或 `www` |
|
||
| 记录值 | 你的服务器公网 IP,如 `123.45.67.89` |
|
||
| TTL | 600(或默认) |
|
||
|
||
### 4.3 验证解析生效
|
||
|
||
等待 1-5 分钟,然后测试:
|
||
|
||
```bash
|
||
ping your.domain.com
|
||
```
|
||
|
||
如果返回你的服务器 IP,说明解析成功。
|
||
|
||
---
|
||
|
||
## 5. 申请 SSL 证书
|
||
|
||
使用 Let's Encrypt 免费证书。
|
||
|
||
### 5.1 SSH 连接到服务器
|
||
|
||
使用 SSH 工具连接到你的公网服务器。
|
||
|
||
### 5.2 安装 Certbot
|
||
|
||
```bash
|
||
# Ubuntu / Debian
|
||
apt update && apt install certbot -y
|
||
|
||
# CentOS
|
||
yum install certbot -y
|
||
```
|
||
|
||
### 5.3 申请证书
|
||
|
||
使用 DNS 验证方式,**不需要占用 80/443 端口**:
|
||
|
||
```bash
|
||
certbot certonly --manual --preferred-challenges dns -d your.domain.com
|
||
```
|
||
|
||
> ⚠️ 将 `your.domain.com` 替换为你的实际域名
|
||
|
||
### 5.4 按提示操作
|
||
|
||
1. **输入邮箱**:用于接收证书到期提醒
|
||
2. **同意条款**:输入 `Y`
|
||
3. **分享邮箱**:输入 `N`(可选)
|
||
|
||
### 5.5 添加 DNS TXT 记录
|
||
|
||
Certbot 会显示类似信息:
|
||
|
||
```
|
||
Please deploy a DNS TXT record under the name:
|
||
_acme-challenge.your.domain.com
|
||
with the following value:
|
||
aBcDeFgHiJkLmNoPqRsTuVwXyZ1234567890
|
||
```
|
||
|
||
**去域名管理面板添加 TXT 记录:**
|
||
|
||
| 字段 | 填写 |
|
||
|------|------|
|
||
| 记录类型 | TXT |
|
||
| 主机记录 | `_acme-challenge` |
|
||
| 记录值 | Certbot 显示的那串字符 |
|
||
| TTL | 600 |
|
||
|
||
### 5.6 验证 TXT 记录生效
|
||
|
||
```bash
|
||
nslookup -type=TXT _acme-challenge.your.domain.com
|
||
```
|
||
|
||
看到记录值后,**回到 Certbot 按回车**继续。
|
||
|
||
### 5.7 证书申请成功
|
||
|
||
成功后显示:
|
||
|
||
```
|
||
Successfully received certificate.
|
||
Certificate is saved at: /etc/letsencrypt/live/your.domain.com/fullchain.pem
|
||
Key is saved at: /etc/letsencrypt/live/your.domain.com/privkey.pem
|
||
```
|
||
|
||
**记住这两个路径,后面要用。**
|
||
|
||
### 5.8 设置自动续期(可选)
|
||
|
||
证书有效期 90 天,建议设置自动续期:
|
||
|
||
```bash
|
||
# 方法一:直接添加定时任务(推荐)
|
||
(crontab -l 2>/dev/null; echo "0 0 1 * * certbot renew --quiet && systemctl reload nginx") | crontab -
|
||
|
||
# 方法二:手动编辑
|
||
crontab -e
|
||
# 添加这行:0 0 1 * * certbot renew --quiet && systemctl reload nginx
|
||
# 按 Ctrl+O 保存,Ctrl+X 退出
|
||
```
|
||
|
||
> 💡 这会在每月 1 号自动检查并续期证书。
|
||
|
||
---
|
||
|
||
## 6. 安装配置 Nginx
|
||
|
||
### 6.1 安装 Nginx
|
||
|
||
```bash
|
||
# Ubuntu / Debian
|
||
apt update && apt install nginx -y
|
||
|
||
# CentOS
|
||
yum install nginx -y && systemctl enable nginx
|
||
```
|
||
|
||
### 6.2 删除默认配置(避免端口冲突)
|
||
|
||
```bash
|
||
# Ubuntu / Debian
|
||
rm -f /etc/nginx/sites-enabled/default
|
||
|
||
# CentOS - 跳过此步(我们用 8080 端口,不冲突)
|
||
```
|
||
|
||
### 6.3 创建配置文件
|
||
|
||
> ⚠️ **重要**:把命令中的 `your.domain.com` 替换为你的实际域名(共 4 处)
|
||
|
||
**Ubuntu / Debian:**
|
||
|
||
```bash
|
||
cat > /etc/nginx/sites-available/yama << 'EOF'
|
||
server {
|
||
listen 8080 ssl;
|
||
server_name your.domain.com;
|
||
|
||
ssl_certificate /etc/letsencrypt/live/your.domain.com/fullchain.pem;
|
||
ssl_certificate_key /etc/letsencrypt/live/your.domain.com/privkey.pem;
|
||
|
||
location / {
|
||
proxy_pass http://127.0.0.1:9000;
|
||
proxy_http_version 1.1;
|
||
|
||
# WebSocket 支持(重要)
|
||
proxy_set_header Upgrade $http_upgrade;
|
||
proxy_set_header Connection "upgrade";
|
||
proxy_set_header Host $host;
|
||
proxy_set_header X-Real-IP $remote_addr;
|
||
|
||
# 长连接超时
|
||
proxy_read_timeout 86400;
|
||
}
|
||
}
|
||
EOF
|
||
```
|
||
|
||
**CentOS:**
|
||
|
||
```bash
|
||
cat > /etc/nginx/conf.d/yama.conf << 'EOF'
|
||
server {
|
||
listen 8080 ssl;
|
||
server_name your.domain.com;
|
||
|
||
ssl_certificate /etc/letsencrypt/live/your.domain.com/fullchain.pem;
|
||
ssl_certificate_key /etc/letsencrypt/live/your.domain.com/privkey.pem;
|
||
|
||
location / {
|
||
proxy_pass http://127.0.0.1:9000;
|
||
proxy_http_version 1.1;
|
||
|
||
# WebSocket 支持(重要)
|
||
proxy_set_header Upgrade $http_upgrade;
|
||
proxy_set_header Connection "upgrade";
|
||
proxy_set_header Host $host;
|
||
proxy_set_header X-Real-IP $remote_addr;
|
||
|
||
# 长连接超时
|
||
proxy_read_timeout 86400;
|
||
}
|
||
}
|
||
EOF
|
||
```
|
||
|
||
> 💡 **端口说明**:这里用 `8080`,你可以改成其他未被占用的端口(如 9443)。
|
||
|
||
### 6.4 启用配置(仅 Ubuntu/Debian 需要)
|
||
|
||
```bash
|
||
ln -s /etc/nginx/sites-available/yama /etc/nginx/sites-enabled/
|
||
```
|
||
|
||
> CentOS 已在上一步直接创建到 `conf.d` 目录,无需此步骤。
|
||
|
||
### 6.5 测试并启动
|
||
|
||
```bash
|
||
nginx -t && systemctl restart nginx
|
||
```
|
||
|
||
看到以下输出说明配置正确:
|
||
```
|
||
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
|
||
nginx: configuration file /etc/nginx/nginx.conf test is successful
|
||
```
|
||
|
||
如果报错,检查域名是否替换正确、证书路径是否存在。
|
||
|
||
---
|
||
|
||
## 7. 配置 FRP
|
||
|
||
### 7.1 FRP 服务端配置 (frps.toml)
|
||
|
||
在公网服务器上:
|
||
|
||
```toml
|
||
bindPort = 7000
|
||
```
|
||
|
||
### 7.2 FRP 客户端配置
|
||
|
||
#### 方式一:通过 Yama 程序配置(推荐)
|
||
|
||
1. 打开 Yama 主控程序
|
||
2. 菜单 → 设置 → FRP 设置
|
||
3. 启用 FRP
|
||
4. 设置 Web 端口为 `9000`
|
||
5. 保存
|
||
|
||
无需手动编辑配置文件。
|
||
|
||
#### 方式二:手动编辑 frpc.toml
|
||
|
||
在你的本机(Windows):
|
||
|
||
```toml
|
||
serverAddr = "你的服务器IP或域名"
|
||
serverPort = 7000
|
||
|
||
[[proxies]]
|
||
name = "yama-web"
|
||
type = "tcp"
|
||
localPort = 9000
|
||
remotePort = 9000
|
||
```
|
||
|
||
> 💡 **说明**:FRP 把服务器的 9000 端口转发到你本机的 9000 端口。
|
||
|
||
---
|
||
|
||
## 8. 启动服务
|
||
|
||
### 8.1 开放防火墙端口(重要!)
|
||
|
||
很多新手卡在这一步。**服务器防火墙必须开放以下端口**:
|
||
|
||
```bash
|
||
# 查看防火墙状态
|
||
ufw status # Ubuntu
|
||
firewall-cmd --state # CentOS
|
||
|
||
# Ubuntu - 开放端口
|
||
ufw allow 8080 # Nginx HTTPS 端口
|
||
ufw allow 7000 # FRP 端口
|
||
ufw allow 9000 # FRP Web 转发端口
|
||
|
||
# CentOS - 开放端口
|
||
firewall-cmd --permanent --add-port=8080/tcp
|
||
firewall-cmd --permanent --add-port=7000/tcp
|
||
firewall-cmd --permanent --add-port=9000/tcp
|
||
firewall-cmd --reload
|
||
```
|
||
|
||
> ⚠️ **云服务器还需要在控制台安全组中开放这些端口!**(阿里云、腾讯云等)
|
||
|
||
### 8.2 启动顺序
|
||
|
||
按以下顺序启动:
|
||
|
||
1. **服务器上**:启动 FRP Server
|
||
```bash
|
||
./frps -c frps.toml
|
||
```
|
||
|
||
2. **服务器上**:确认 Nginx 在运行
|
||
```bash
|
||
systemctl status nginx
|
||
```
|
||
|
||
3. **本机上**:启动 Yama 主控程序
|
||
|
||
> 💡 **提示**:如果在 Yama 中启用了 FRP 功能,程序启动时会自动连接 FRP Server,无需手动启动 frpc。
|
||
|
||
### 8.3 流量路径
|
||
|
||
```
|
||
手机浏览器
|
||
│
|
||
│ HTTPS (端口 8080)
|
||
▼
|
||
Nginx (SSL 终结)
|
||
│
|
||
│ HTTP (端口 9000)
|
||
▼
|
||
FRP Server
|
||
│
|
||
│ TCP 隧道
|
||
▼
|
||
FRP Client
|
||
│
|
||
│ 本地 (端口 9000)
|
||
▼
|
||
Yama WebService
|
||
```
|
||
|
||
---
|
||
|
||
## 9. 手机访问测试
|
||
|
||
### 9.1 打开浏览器
|
||
|
||
在手机浏览器输入:
|
||
|
||
```
|
||
https://your.domain.com:8080
|
||
```
|
||
|
||
> ⚠️ 注意是 `https://`,不是 `http://`
|
||
|
||
### 9.2 登录
|
||
|
||
输入用户名密码登录。
|
||
|
||
### 9.3 连接远程桌面
|
||
|
||
选择设备,点击连接,享受远程桌面。
|
||
|
||
---
|
||
|
||
## 10. 常见问题
|
||
|
||
### Q: 浏览器提示"不安全"或证书错误
|
||
|
||
A: 检查域名是否和证书匹配,证书是否过期:
|
||
```bash
|
||
certbot certificates
|
||
```
|
||
|
||
### Q: 无法访问,连接超时
|
||
|
||
A: 检查各服务是否运行:
|
||
```bash
|
||
systemctl status nginx
|
||
netstat -tlnp | grep 8080
|
||
netstat -tlnp | grep 9000
|
||
```
|
||
|
||
### Q: WebSocket 连接失败
|
||
|
||
A: 确认 Nginx 配置中有 `Upgrade` 和 `Connection` 头配置。
|
||
|
||
### Q: 仍然提示 VideoDecoder not available
|
||
|
||
A:
|
||
1. 确认使用 `https://` 访问
|
||
2. 清除浏览器缓存后重试
|
||
3. 换个浏览器试试(推荐 Chrome/Edge)
|
||
|
||
### Q: 证书过期了
|
||
|
||
A: 手动续期:
|
||
```bash
|
||
certbot renew
|
||
systemctl reload nginx
|
||
```
|
||
|
||
### Q: FRP 连接不上
|
||
|
||
A: 参考 [8.1 开放防火墙端口](#81-开放防火墙端口重要) 检查防火墙配置。
|
||
|
||
### Q: 云服务器(阿里云/腾讯云)无法访问
|
||
|
||
A: 除了服务器防火墙,还需要在**云控制台的安全组**中开放端口:
|
||
1. 登录云服务器控制台
|
||
2. 找到「安全组」设置
|
||
3. 添加入站规则,开放 8080、7000、9000 端口
|
||
|
||
### Q: 如何测试各环节是否正常
|
||
|
||
A: 逐步排查:
|
||
```bash
|
||
# 1. 测试 Nginx 是否监听
|
||
curl -k https://127.0.0.1:8080
|
||
|
||
# 2. 测试 FRP 是否转发
|
||
curl http://127.0.0.1:9000
|
||
|
||
# 3. 测试域名是否解析正确
|
||
ping your.domain.com
|
||
|
||
# 4. 测试外部访问(在手机上)
|
||
# 打开 https://your.domain.com:8080
|
||
```
|
||
|
||
---
|
||
|
||
## 总结
|
||
|
||
| 步骤 | 操作位置 | 说明 |
|
||
|------|----------|------|
|
||
| 获取域名 | 域名注册商 | 购买或免费获取 |
|
||
| 域名解析 | 域名管理面板 | A 记录指向服务器 IP |
|
||
| 申请证书 | 服务器 | Let's Encrypt 免费证书 |
|
||
| 配置 Nginx | 服务器 | SSL 终结 + 反向代理 |
|
||
| 开放防火墙 | 服务器 + 云控制台 | 开放 8080、7000、9000 端口 |
|
||
| 配置 FRP | 服务器 + 本机 | 内网穿透 |
|
||
| 访问测试 | 手机 | `https://域名:端口` |
|
||
|
||
配置完成后,你就可以随时随地用手机访问远程桌面了!
|
||
|
||
---
|
||
|
||
**遇到问题?** 查看 [常见问题](#10-常见问题) 或逐步排查各环节。
|