我想在我的语法NAS上使用一个nginx前端服务器进行反向代理。目标是为承载NAS的不同NAS服务器使用的非标准端口号提供一个外观。nginx应该监听端口80,否则就没有任何意义了。
但是,DSM的Apache服务器已经在监听端口80了。它所做的非常愚蠢:它只是将端口5000重定向到NAS web管理器(DSM)的入口点。
我想要做的是禁用此功能,使端口80可用于我的nginx服务器。我该怎么做?
发布于 2015-06-22 16:38:27
tl;编辑
/usr/syno/etc/synoservice.d/httpd-user.cfg博士看上去像: {“init_job_map”:{“upstart”:“httpd”},"user_controllable":"no","mtu_sensitive":"yes","auto_start":"no“} 然后将stop on runlevel编辑为/etc/init/httpd-user.conf中的[0123456]: Syno-服务器> cat /etc/init/httpd-user.conf描述“启动httpd-用户守护进程”作者“开发基础设施团队”控制台日志重新加载信号SIGUSR1启动在syno.share.ready和syno.network.ready停止在运行级别0123456 . ..。那就重新启动。
背景信息
Backslash36给出的答案不是最简单的解决方案,也可能更难维护。在这里,我给出了一个不涉及启动webstation的解决方案,这是大多数其他解决方案所需要的。注意,有关更新的文档,请参阅这里,它提供了很多关于synology系统的信息。
需要注意的是,新的DSM (> 5.x)现在使用upstart,所以前面的许多文档都是不正确的。在语法机器上默认运行两个httpd作业:
httpd-sys:服务于管理页面,默认情况下位于5000/5001上。httpd-user:这有点令人困惑,即使没有启用webstation程序也总是运行。如果是webstation
/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守护进程启动。这大概是你想要的(比如在码头上启动另一个服务器,比如‘`nginx’)。为此,编辑相关的upstart配置文件:
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"
}因此,"auto_start"条目是"no" (如上面所示)。它可能是您机器上的"yes",在默认情况下是这样。然后将stop on runlevel编辑为/etc/init/httpd-user.conf中的[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上没有监听(或转发)任何内容。
发布于 2015-05-22 22:06:24
搞定了!这件事很棘手,但现在我已经做得很好了。我就是这么做的。
下面的内容需要用ssh连接到NAS,如果您希望保持产品的保修(即使这是完全安全的IMHO),则可能不推荐使用。
TL;DR:在以下文件中,将端口
80的所有出现替换为非标准端口(例如,8080)。这将释放端口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配置一无所知的约翰·斯诺也是如此。诀窍是注意到,httpd.conf是在启动时从某个模板实例化的(因此,仅更改该文件是不够的)。执行find / -name "*httpd.conf*",再加上一些grep 80,给了我要修改的文件列表。
当然,当你回头看,这一切都是显而易见的。不过,我希望语法给我们更多的灵活性,所以我们不需要做这样的肮脏的黑客.
https://stackoverflow.com/questions/30406530
复制相似问题