RustDesk Nginx反向代理与HTTPS配置完全指南
为什么需要Nginx反向代理
部署RustDesk自建服务器后,默认情况下hbbs和hbbr服务直接暴露在公网上。虽然这种方式简单直接,但在生产环境中存在一些问题:
- 直接使用IP和端口访问不够优雅
- 缺乏统一的HTTPS加密入口
- 难以实现负载均衡和访问控制
- 不便于与现有Web服务共存
通过Nginx反向代理,可以解决上述问题,同时提升安全性、可维护性和专业性。
前置条件
已部署RustDesk服务端
在配置Nginx之前,你需要已经部署好RustDesk服务端:
- 已安装hbbs和hbbr服务
- 已知服务运行的端口(默认21115-21119)
- 服务端能够正常运行并接受连接
已安装Nginx
确保Nginx已经安装并可以正常运行:
# Ubuntu/Debian
sudo apt update
sudo apt install nginx
# CentOS/RHEL
sudo yum install nginx
# 验证安装
nginx -v
已准备域名和SSL证书
配置HTTPS需要:
- 一个已解析到服务器的域名
- 对应的SSL证书(可以使用Let’s Encrypt免费证书)
RustDesk端口说明
在配置反向代理前,先了解RustDesk服务使用的端口:
| 端口 | 协议 | 用途 |
|---|---|---|
| 21114 | TCP | Web控制台(可选) |
| 21115 | TCP | NAT探测服务 |
| 21116 | TCP | ID注册服务 |
| 21117 | TCP | Relay服务控制 |
| 21118 | TCP | WebSocket/HTTP服务 |
| 21119 | TCP | WebSocket/HTTP服务 |
通常,hbbs和hbbr会监听这些端口。Nginx反向代理主要针对21118/21119等Web相关端口。
基础Nginx配置
HTTP反向代理配置
以下是最基础的Nginx反向代理配置,将 hbbs 的 Web 接口通过域名暴露:
server {
listen 80;
server_name rustdesk.example.com;
location / {
proxy_pass http://127.0.0.1:21114;
proxy_http_version 1.1;
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 X-Forwarded-Proto $scheme;
}
}
HTTPS反向代理配置
生产环境强烈建议使用HTTPS:
server {
listen 80;
server_name rustdesk.example.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name rustdesk.example.com;
ssl_certificate /path/to/your/fullchain.pem;
ssl_certificate_key /path/to/your/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://127.0.0.1:21114;
proxy_http_version 1.1;
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 X-Forwarded-Proto $scheme;
}
}
WebSocket代理配置
RustDesk的Web客户端和控制台使用了WebSocket协议,Nginx需要正确配置WebSocket转发:
location /ws/ {
proxy_pass http://127.0.0.1:21118;
proxy_http_version 1.1;
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_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
WebSocket代理的关键是正确设置 Upgrade 和 Connection 头部,否则WebSocket连接会失败。
完整生产环境配置示例
以下是一份更完整的生产环境Nginx配置,包含WebSocket支持、安全头部和性能优化:
server {
listen 80;
server_name rustdesk.example.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name rustdesk.example.com;
ssl_certificate /path/to/fullchain.pem;
ssl_certificate_key /path/to/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256';
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
location / {
proxy_pass http://127.0.0.1:21114;
proxy_http_version 1.1;
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 X-Forwarded-Proto $scheme;
proxy_read_timeout 86400;
}
location /ws/ {
proxy_pass http://127.0.0.1:21118;
proxy_http_version 1.1;
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_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_read_timeout 86400;
}
}
SSL证书申请与自动续期
使用Certbot申请Let’s Encrypt证书
# 安装Certbot
sudo apt install certbot python3-certbot-nginx
# 申请证书
sudo certbot --nginx -d rustdesk.example.com
# 测试自动续期
sudo certbot renew --dry-run
手动配置证书
如果你有商业证书,将证书文件上传到服务器后,在Nginx配置中指定路径即可。
安全加固建议
限制访问IP
如果RustDesk服务仅供特定人员使用,可以在Nginx中限制访问IP:
location / {
allow 192.168.1.0/24;
allow 10.0.0.0/8;
deny all;
# ... proxy配置
}
启用基本认证
为Web控制台添加一层HTTP基本认证:
# 生成密码文件
sudo htpasswd -c /etc/nginx/.htpasswd admin
然后在Nginx配置中添加:
location / {
auth_basic "Restricted Area";
auth_basic_user_file /etc/nginx/.htpasswd;
# ... proxy配置
}
防火墙配置
配合Nginx反向代理,可以进一步收紧防火墙规则:
- 关闭21114端口的公网访问(通过Nginx入口访问)
- 仅开放443端口和RustDesk需要的TCP/UDP端口
- 使用fail2ban防止暴力破解
常见问题排查
443端口无法访问
检查项目包括:
- 域名是否正确解析到服务器IP
- 防火墙是否放行443端口
- SSL证书路径是否正确
- Nginx配置语法是否正确
WebSocket连接失败
常见原因和解决方法:
| 现象 | 原因 | 解决 |
|---|---|---|
| Web界面加载但不连接 | WebSocket未代理 | 添加Upgrade头部 |
| 连接后频繁断开 | 超时时间过短 | 增加proxy_read_timeout |
| 报403错误 | 路径匹配错误 | 检查location路径 |
HTTPS配置后不生效
排查步骤:
- 执行
sudo nginx -t检查配置语法 - 执行
sudo systemctl reload nginx重新加载 - 查看Nginx错误日志
/var/log/nginx/error.log - 确认证书文件权限正确
Nginx与RustDesk服务共存
如果同一台服务器上还运行其他Web服务,Nginx可以统一作为入口。例如,将RustDesk控制台放在 /rustdesk/ 路径下:
location /rustdesk/ {
proxy_pass http://127.0.0.1:21114/;
proxy_http_version 1.1;
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 X-Forwarded-Proto $scheme;
}
注意 proxy_pass 末尾的斜杠,它决定了路径是否被剥离。
总结
通过Nginx反向代理RustDesk服务端,可以实现统一的HTTPS访问入口、更好的安全控制和更专业的访问方式。配置过程主要包括Nginx安装、SSL证书部署、反向代理规则设置和WebSocket支持。完成后,配合IP限制、基本认证和防火墙规则,可以大幅提升RustDesk自建服务器的安全性和可维护性。遇到问题时,优先检查Nginx配置语法、SSL证书有效性和WebSocket头部设置。
这篇教程有帮助吗?立即下载RustDesk 中文网试试吧!
全平台支持 · 安全无毒 · 官方最新版