群晖反向代理服务强制HTTPS访问

前言
因运营商公网封禁80,443端口。
群晖部署证书后,开启重定向。在反向代理中无法使用标准端口,只能使用非标准端口。
日常访问中浏览器需要输入完整的网址例如https://xxx.com:port/
。
如果只输入网址加端口如xxx.com:port
,浏览器默认是访问http而不是https,所以本文提供一种方案可以实现http自动跳转https,免去每次都要输入完整网址的烦恼。
环境
- NAS:
威联通453DMini
- 系统版本:
DSM 7.1.1-42962
设置反向代理
DSM 7
进入控制面板→登录门户→高级→反向代理服务器
DSM 6
进入控制面板→应用程序门户→反向代理服务器
来源端口设置从公网访问的端口。域名填写自己的域名,目的地填写自己想代理出的服务
注意,如果是DSM7以下的,打开启用HSTS和启动HTTP/2,DSM7打开HSTS就可以了。
选中顶栏中的第二个自定义标题,点击新增,WebSocket,完成后保存即可
修改群晖nginx配置模板
用xshell或者其他自己熟悉的shell工具连接群晖,运行cd /usr/syno/share/nginx/,该目录下就是nginx的模板文件。Portal.mustache就是我们要修改的文件。
运行sudo vi Portal.mustache,修改模板文件,在location之前添加模板,这里用到了nginx的error_page 497进行重定向,上下两个括弧是模板语言,大概意思就是当括弧里的https.hsts的值为true时,就渲染中间那行的代码,所以刚才添加反向代理规则时要把这个参数勾上,这里可以用到。
重启服务
DSM6
1 | sudo synoservicecfg --restart nginx |
DSM7
1 | sudo systemctl restart nginx |
修改完模板后,重启nginx服务,重启之后,执行cd /etc/nginx/app.d/,生成的配置文件server.ReverseProxy.conf就在该目录下
查看该文件,可以看到对于开启了https的4430端口,已经添加了重定向规则,而我设置的另一个作为测试的未开启https的4431端口,则不会添加重定向规则,这样就保证有https的服务都能自动跳转https,不支持https的服务则不受影响。
- Title: 群晖反向代理服务强制HTTPS访问
- Author: Kxhubs
- Created at : 2023-09-07 17:13:32
- Updated at : 2023-10-08 13:19:50
- Link: https://blog.kxhubs.com/2023/09/07/群晖反向代理服务强制HTTPS访问/
- License: This work is licensed under CC BY-NC-SA 4.0.