1. 首页
  2. 科技数码

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

前言

单看标题好像没什么好讲的,不就是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://的步骤,端口号也只需要记一个。以上只是我自己的访问方案,希望对各位能有帮助

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

原创文章,作者:夜风博客,如若转载,请注明出处:https://www.homedt.net/47539.html