群晖无端口访问
前提
nas需要有动态公网ip
购买一个域名
提前申请好通配符SSL证书(可以用这个 joyssl.com )
一台云服务器(最低配即可,主要使用该服务器的80和443端口)
目标
访问 nas.vvhz.com 即可访问DSM ddns.vvhz.com:15001
DDNS配置
首先nas需要有动态公网ip,然后进行ddns配置(如下图)
配置好ddns之后,当前DMS的登录地址为:ddns.vvhz.com:15001 (DMS端口根据自己配置填写)
确保带端口的地址可以正常访问之后,再进行下一步操作。
DNS配置
nas.vvhz.com 解析到我们的云服务器的ip
DSM配置
在DSM中上传我们提前申请好的SSL证书。
因为我们是使用html嵌套来完成无端口访问,因此需要在DSM中配置允许IFrame嵌套。
html嵌套这种方式实现无端口访问不会占用云服务器带宽。
Nginx配置
我们目的是去掉端口,通过 nas.vvhz.com 访问 ddns.vvhz.com:15001,这里我们使用nginx进行代理
访问流程:浏览器输入 nas.vvhz.com 经过dns解析会访问到我们的nginx服务器指定的那个index.html,该html页面内嵌了我们DSM的带端口的地址。因此就实现了无端口访问。
nas.vvhz.com 内嵌 ddns.vvhz.com:15001,因此如果需要使用https,需要一个通配符证书*.vvhz.com。生成完的SSL证书需要上传到DSM和云服务器上。
在我们购买的云服务器上安装nginx,安装好之后添加如下配置:
server {
listen 80; # 监听80端口
server_name nas.vvhz.com; # 自己的域名
#把http的域名请求转成https
return 301 https://$host$request_uri;
}
server {
listen 443;
server_name nas.vvhz.com;
## SSL证书路径
ssl_certificate /home/soft/nginx/cert/vvhz.com/vvhz.com_bundle.crt;
ssl_certificate_key /home/soft/nginx/cert/vvhz.com/vvhz.com.key;
location / {
## 指向html路径
root /home/soft/nginx/web/nas;
index index.html;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
在上面 root 指定的目录下新建一个index.html文件,内容如下:
<html lang="zh_CN">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=2">
<link rel="icon" href="favicon.ico" type ="image/x-icon">
<title>NAS</title>
</head>
<frameset rows="100%">
<frame src="https://ddns.vvhz.com:15001"></frame>
</frameset>
</html>
nginx修改完配置之后记得重启。
验证
浏览器输入 nas.vvhz.com 可以正常访问。
使用同样的方法,拷贝nginx和html文件,其他服务也一样可以无端口访问。