群晖自定义端口实现所有web服务强制https访问

2022-06-24 16:30:02 92点赞 1035收藏 66评论

前言

单看标题好像没什么好讲的,不就是https访问吗,添加ssl证书,然后在DSM设置里打开自动重定向到https就可以了。然而实际并不是这样的,我这边运营商封80和443端口,上述操作在内网是没问题的,但是到外网,通过80端口是访问不了的,即使你开了重定向,但是80端口根本访问不到,别说https了,http也访问不了。

那封了80,443要怎么访问?当然是在域名后面加端口号了,但是除了DSM的服务,你肯定还会开其他web服务,这样就要记很多端口了。而且最大的一个问题是,如果你要走https,每次都要在浏览器里输入https://xx.xx.com:port,如果直接输入域名的话,默认还是访问http。接下来就介绍一下我的方案,完成之后,对于开启了https的服务,只需要输入xx.xx.com:port就可以访问,对于port端口,我们只需要记住一个,其余服务的端口使用反向代理。

设置防火墙

首先进入控制面板→安全性在群晖中打开用于https访问的端口,由于443端口被封,不妨选择4430作为使用端口

群晖自定义端口实现所有web服务强制https访问

设置反向代理

进入控制面板→应用程序门户→反向代理服务器,添加反向代理规则,刚才选择的是4430端口,这里的来源端口就填4430,域名请根据自己的设置来填写。目的地根据自己的web服务填写,以群晖默认的端口5001为例。这里注意,一定要打开HSTS以及HTTP/2,这两个选项后面会作为模板的参数使用。

群晖自定义端口实现所有web服务强制https访问

修改群晖nginx配置模板

用finalshell或者其他自己熟悉的shell工具连接群晖,运行cd /usr/syno/share/nginx/,该目录下就是nginx的模板文件。Portal.mustache就是我们要修改的文件。

群晖自定义端口实现所有web服务强制https访问

打开这个文件,可以看到是用mustache写的模板文件,里面用到了一些参数,生成的时候应该是从某个json文件读取的。

群晖自定义端口实现所有web服务强制https访问

通过查找终于发现,这个json文件在/usr/syno/etc/www路径下,其中ReverseProxy.json就是我们需要的文件

群晖自定义端口实现所有web服务强制https访问

查看这个文件的内容,对其进行格式化,可以发现,里面的数据就是我们刚才填写反向代理的数据

群晖自定义端口实现所有web服务强制https访问

接下来回到最开始的/usr/syno/share/nginx/目录下,运行sudo vi Portal.mustache,修改模板文件,在location之前添加模板,具体代码看图,这里用到了nginx的error_page 497进行重定向,上下两个括弧是模板语言,大概意思就是当括弧里的https.hsts的值为true时,就渲染中间那行的代码,所以刚才添加反向代理规则时要把这个参数勾上,这里可以用到。

群晖自定义端口实现所有web服务强制https访问

修改完模板后,运行sudo synoservicecfg --restart nginx,重启nginx服务,重启之后,执行cd /etc/nginx/app.d/,生成的配置文件server.ReverseProxy.conf就在该目录下

群晖自定义端口实现所有web服务强制https访问

查看该文件,可以看到对于开启了https的4430端口,已经添加了重定向规则,而我设置的另一个作为测试的未开启https的4431端口,则不会添加重定向规则,这样就保证有https的服务都能自动跳转https,不支持https的服务则不受影响。

群晖自定义端口实现所有web服务强制https访问

群晖自定义端口实现所有web服务强制https访问

总结

到此,对于开启https的服务,就可以在浏览器直接输入域名+端口号直接访问了,省去了输入https://的步骤,端口号也只需要记一个。以上只是我自己的访问方案,希望对各位能有帮助

作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~

展开 收起
66评论

  • 精彩
  • 最新
  • OKCup

    作者
    置顶 可能文章标题写得不是很清楚,我这么做的目的主要是要强制开启https访问,不用在浏览器输入https(没错就是这么懒),只输入域名+端口号就可以实现https访问

    校验提示文案

    提交
    我一直在用这套方案,不过存在某些问题。一是客户端浏览器必须https访问一次,hsts才会生效,真想重定向还是得301。二是hsts触发之后客户端浏览器就锁定该域名https访问了,想访问http的网页需要清空cookie。还有就是群晖反代后部分websocket会出现一些bug,例如vmware的控制台无法连接。
    不过总体来说还是挺好用的。

    校验提示文案

    提交
    websocket群晖反代是支持的。具体是在设置页面那里,标题添加,有个websocket,点击之后自动会添加两个选项。保存就可以了。

    校验提示文案

    提交
    还有1条回复
    收起所有回复
  • 我选择做个人导航页

    校验提示文案

    提交
    也是不错的选择,等我网页再多一点 [赞一个]

    校验提示文案

    提交
    正解 。。。

    校验提示文案

    提交
    还有3条回复
    收起所有回复
  • 虽然这篇教程应该是我想要的,但也太专业了,看不懂

    校验提示文案

    提交
    如果你看懂了我的意思的话,可以试一下,就是改下配置文件

    校验提示文案

    提交
    收起所有回复
  • 群晖反代我记得应该挺简单的。如果是这么麻烦我推荐不如在docker安装nginx proxy maneger,全图形界面,不用操心命令行。

    校验提示文案

    提交
    跟这个没关系,我是要把所有的能支持https的网页,都让他强制使用https,在输入域名的时候我不需要另外再打https

    校验提示文案

    提交
    浏览器你根本不用打https,会自适应的 [抽烟] 而且,你不会用收藏夹吗 [抽烟] [抽烟]

    校验提示文案

    提交
    收起所有回复
  • 我前两天刚设置了,忘记怎么弄了,没这个复杂呀

    校验提示文案

    提交
    因为你只是打开的dsm界面的https,我这个方法是针对所有支持https的web服务

    校验提示文案

    提交
    话说还有网页不支持s么 直接群晖自带的反代就可以设置了 导入证书就可以了 不用这么麻烦的

    校验提示文案

    提交
    还有2条回复
    收起所有回复
  • 不明觉厉,为什么我什么都没设过就能做到这样?运营商也封了80端口

    校验提示文案

    提交

    OKCup

    作者

    imco

    我这样除了群晖,其他web服务也是能直接重定向https的,比如我装了qbittorrent,我的qbittorrent在反代里设置好以后也能直接用https打开,你如果只是进群晖的页面确实不用这样设置

    校验提示文案

    提交
    收起所有回复
  • 你这个确实好复杂。我只添加了证书就结束了。剩下的就是端口转发设置好即可。

    校验提示文案

    提交
    但是你这样除了群晖的页面自带重定向,其他的都要手动输入https

    校验提示文案

    提交
    收起所有回复
  • 手机上的photostation 还能正常备份吗?

    校验提示文案

    提交
    我没用photostation,能连上应该就能备份,我用群晖管家用流量是能登录的

    校验提示文案

    提交
    收起所有回复
  • 我选择申请一个oracle免费服务器,走服务器域名重定向,只要记域名不用记端口号

    校验提示文案

    提交
    海外的机子还是算了,不扶墙都会被墙,我现在都懒得薅了

    校验提示文案

    提交
    收起所有回复
  • 要删除设置的反向代理服务器,重新添加才能按照模板生成新带重定向的规则吧

    校验提示文案

    提交
    重启一下nginx应该就行

    校验提示文案

    提交
    收起所有回复
  • 刚好手头有个云服务器,直接在上面搭了个bt做301重定向,把所有域名统统解析到鱼服务器去,也挺香的 [吐舌]

    校验提示文案

    提交
    我只有v6公网,我现在只有一台轻量,没有v6地址 [傻笑]

    校验提示文案

    提交
    收起所有回复
  • 我想知道怎么配置才能让他不强制跳转https。。不知道什么时候我的域名下访问所有访问都会强制跳转,而我docker某个容器的webui根本不支持SSL加密,这就导致我不能用域名+端口号访问这个服务,只能输入IP+端口号。。

    校验提示文案

    提交
    你的解析服务是不是开了强制https

    校验提示文案

    提交
    dnspod的,自从配置好了就没动过 [哭泣] 现在临时配置了反代解决问题,但是又出现了HTTP不能自动跳转HTTPS的问题

    校验提示文案

    提交
    收起所有回复
  • 勾选强制https不就行咯…输入http或者https的端口都是跳转到https端口…群晖自带的功能,至于这么复杂的来嘛…

    校验提示文案

    提交
    说明你就没看我在讲啥

    校验提示文案

    提交
    收起所有回复
  • 保存个书签就完了,谁无聊手敲链接啊

    校验提示文案

    提交
  • 搞复杂了,路由器开了你要指定的端口,然后在群晖反向代理服务器界面里设置下就可以了,完全用不到代码啊!

    校验提示文案

    提交
  • 注意如果是在DSM7中有个别地方不一样
    1. 【设置反向代理 - 一定要打开HSTS以及HTTP/2】 DSM7中没有HTTP/2选项,改为打开HSTS即可
    2. 【修改群晖nginx配置模板】 DSM7中把HSTS模板文件单独拎出来了,不需要修改Portal.mustache文件,仅仅需要修改HSTS.mustache文件。
    命令: sudo vi HSTS.mustache 然后按 i 进入编辑模式
    在正常来说DSM7.0只有一行文字在里面,在文件末尾添加lz给的代码
    error_page 497 https://$host:$server_port$request_uri;
    然后:wq保存即可
    3.【修改完模板后,重启nginx服务】DSM7中命令已改为 synosystemctl restart nginx
    4.【生成的配置文件server.ReverseProxy.conf就在该目录下】 该目录在DSM7中已改为 /etc/nginx/sites-enabled

    最后感谢楼主分享,非常实用的一篇文章! [高兴]

    校验提示文案

    提交
    有用!!!谢谢!!!

    校验提示文案

    提交
    收起所有回复
  • chrome浏览器没这个烦恼,按一个首字母就自动填充完了。在外面登录的机会不多。
    思路很棒…经常在外登录的可能会需要。
    但注册一个短域名是真的方便 [高兴]

    校验提示文案

    提交
  • 这也封那也封,最后我搞了个服务器,备案了一样,感觉只要是外网访问的手段,早晚都给你封了 [皱眉] 就是不想让我们外网互联折腾,老老实实上班工作

    校验提示文案

    提交
  • 无语...

    校验提示文案

    提交
  • 收藏技术贴

    校验提示文案

    提交
提示信息

取消
确认
评论举报

相关文章推荐

更多精彩文章
更多精彩文章

OKCup

栈溢出工程师

发文累计被1035人收藏

关注 打赏
最新文章 热门文章
1.0K
扫一下,分享更方便,购买更轻松