阻止Synology NAS(DSM 5)上从端口80到5000的默认重定向



我想在Synology NAS上使用nginx前端服务器进行反向代理。目标是为托管NAS的各种Web服务器所使用的非标准端口号提供一个外观。nginx应该在端口80上侦听,否则所有这些都没有任何意义。

然而,DSM的开箱即用的Apache服务器已经在端口80上侦听。它所做的非常愚蠢:它只是重定向到端口5000,这是NAS web管理器(DSM(的入口点。

我想做的是禁用此功能,使端口80可用于我的nginx服务器。我该怎么做?

由于谷歌也为最近的Synology DSM重定向到这里,我为DSM6(基于http://tonylawrence.com/posts/unix/synology/freeing-port-80/)

在DSM6中,nginx被用作HTTP服务器和重定向位置。以下命令将保留ngingx,将其放在8880端口而不是80端口运行。

  1. ssh进入您的Synology
  2. sudo -s
  3. cd /usr/syno/share/nginx
  4. 备份server.mustacheDSM.mustacheWWWService.mustache
    • cp server.mustache server.mustache.bak
    • cp DSM.mustache DSM.mustache.bak
    • cp WWWService.mustache WWWService.mustache.bak
  5. sed -i "s/80/8880/g" server.mustache
  6. sed -i "s/80/8880/g" DSM.mustache
  7. sed -i "s/80/8880/g" WWWService.mustache
  8. 也可以选择将443移动到8881
    • sed -i "s/443/8881/g" server.mustache
    • sed -i "s/443/8881/g" DSM.mustache
    • sed -i "s/443/8881/g" WWWService.mustache
  9. 退出shell(例如,通过Ctrl+D(
  10. 转到"控制面板"并更改任何设置(例如,应用程序门户->反向代理将http://YOURSYNOLOGYHOSTNAME:80转发到http://localhost:8181-8181是DSM教程中pi hole建议的端口(

tl;dr/usr/syno/etc/synoservice.d/httpd-user.cfg编辑为:

   {
        "init_job_map":{"upstart":["httpd-user"]},
        "user_controllable":"no",
        "mtu_sensitive":"yes",
        "auto_start":"no"
    }

然后在/etc/init/httpd-user.conf:中将stop on runlevel编辑为[0123456]

Syno-Server> cat /etc/init/httpd-user.conf 
description "start httpd-user daemon"
author "Development Infrastructure Team"
console log
reload signal SIGUSR1
start on syno.share.ready and syno.network.ready
stop on runlevel [0123456]
...

然后重新启动。

背景信息

Backslash36给出的答案不是最简单的解决方案,而且可能更难维护。在这里,我给出了一个不涉及启动webstation的解决方案,这是大多数其他解决方案所需要的。请注意,有关更新的文档,请参阅此处,其中提供了许多关于同义系统的一般信息。

需要注意的是,新的DSM(>5.x(现在使用upstart,因此以前的许多文档都不正确。默认情况下,有两个httpd作业在synology机器上运行:

  1. httpd-sys:服务于管理页面,默认位于5000/5001
  2. httpd-user:这有点令人困惑,总是运行,即使webstation程序没有启用

如果webstation:

  1. 则该程序为用户网页提供服务
  2. 未启用:则此程序将/usr/syno/synoman/phpsrc/web设置为其DocumentRoot(/usr/syno/synoman/phpsrc/web/index.cgi -> /usr/syno/synoman/webman/index.cgi(,这意味着对http://address.of.my.dsm的调用将调用index.cgi文件。这个cgi文件驱动重定向到5000(或您设置的admin_port(

从命令行,您可以检查[secure_]admin_port设置为什么:

Syno-Server> get_key_value /etc/synoinfo.conf admin_port
5184
Syno-Server> get_key_value /etc/synoinfo.conf secure_admin_port
5185

我把我的设定不同了。

好的,现在是解决方案。最好的解决方案是简单地停止httpd-user守护进程的启动。无论如何,这大概就是您想要的(例如,在docker中启动另一个类似"nginx"的服务器(。为此,请编辑相关的暴发户配置文件:

Syno-Server> cat /usr/syno/etc/synoservice.d/httpd-user.cfg 
{
        "init_job_map":{"upstart":["httpd-user"]},
        "user_controllable":"no",
        "mtu_sensitive":"yes",
        "auto_start":"no"
}

使得CCD_ 46条目是CCD_。默认情况下,它在您的机器上可能是"yes"。然后在/etc/init/httpd-user.conf:中将stop on runlevel编辑为[0123456]

Syno-Server> cat /etc/init/httpd-user.conf 
description "start httpd-user daemon"
author "Development Infrastructure Team"
console log
reload signal SIGUSR1
start on syno.share.ready and syno.network.ready
stop on runlevel [0123456]
...

最后一步是确保httpd-user服务确实启动,但随后会自动停止。这是因为在其他方面有许多服务依赖于它的实际启动。重新启动您的机器,您现在将看到端口80上没有任何正在侦听(或转发(的内容。

完成!这很棘手,但现在我能很好地工作了。以下是我的做法。

以下内容需要使用ssh连接到NAS,如果您希望对您的产品进行保修(即使它是完全安全的IMHO(,则可能不建议使用此内容

TL;DR:在以下文件中,用非标准端口(例如8080(替换所有出现的端口80。这将释放端口80,并使其可供任何用户使用。

  • /etc/httpd/conf/httpd.conf
  • /etc/httpd/conf/httpd.conf-user
  • /etc/httpd/conf/httpd.conf-sys
  • /etc.defaults/httpd/conf/httpd.conf-user
  • /etc.defaults/httpd/conf/httpd.conf-sys

请注意,修改这些文件的子集可能就足够了(我可以观察到,第一个文件实际上是从其他几个文件中计算出来的(。我想修改/etc.defaults/中的文件就足够了,但如果没有,最坏的情况是修改所有这些文件,你就可以了。

完成此操作后,不要忘记重新启动NAS!


对于那些对我是如何发现感兴趣的人

我对Linux文件系统不太熟悉,对Apache配置更不熟悉。但我知道处理启动过程的脚本位于/etc/init中。执行重定向的Apache服务器肯定会从那里启动。

  • 这是我不得不弄脏手的地方。我为我认为相关的目录中的文件执行了一些cat <filename> | grep 80,希望找到一个将端口号设置为80的配置行。

  • 这种直觉得到了回报:/etc/init/httpd-user.conf包含了echo "DocumentRoot "/usr/syno/synoman/phpsrc/web"" >> "${HttpdConf}" #port 80 to 5000这一行。答对 了

  • 查看文件的顶部,我发现HttpdConf变量指的是/etc/httpd/conf/httpd.conf。这就是实际配置发生的地方。

从那里来说,这是相对简单的,即使对于那些对Apache配置一无所知的John Snow来说也是如此。诀窍是注意到httpd.conf是在启动时从某个模板实例化的(因此,更改此文件是不够的(。执行一个find / -name "*httpd.conf*",再加上一些grep 80,给了我要修改的文件列表。

当你回首往事时,这一切看起来当然显而易见。然而,我希望Synology能给我们更多的灵活性,这样我们就不必执行这样的肮脏黑客。。。

最新更新