如何在单台机器上管理/组合多台服务器?

Posted

技术标签:

【中文标题】如何在单台机器上管理/组合多台服务器?【英文标题】:How to manage/combine multiple servers on single machine? 【发布时间】:2014-03-20 11:23:12 【问题描述】:

TLDR: “真正的服务器”(Apache?Flask?Django?)是否能够统一可读子目录(abc.work.com/svn、abc.work.com/hg)后面的各种服务,而不是使用端口号(abc.work.com/hg)。 com:8000, abs.work.com:8001)?

长版: 在过去的一年里,我学会了如何使用 Mongoose 提供文件,运行一个最小的 Python 网络服务器,使用 Subversion 和 Mercurial 托管版本控制存储库,以及托管一个 Trac 问题跟踪器/项目管理框架。

在每种情况下,我一直在使用每个工具提供的简单内置网络服务器在工作时从我的 Windows 7 笔记本电脑托管它(我是一名编码工程师,实际上并没有付钱成为一名“软件人” )。为了避免冲突,我为每个服务器使用了 8000 范围内的不同端口号来监听,并向我的同事发送了http://machinename.domain.com:8042 之类的链接来访问我创建的这些神奇的东西。

第一个明显的问题是我在命令提示符下运行了很多这些东西,只是让它在我的桌面上打开。我也知道如何从 VBScript 调用 cmd.exe 以隐藏命令提示符(如果这就是我想要的)。许多内置的网络服务器甚至具有作为服务运行的选项,这可能会因权限而变得困难,但更接近于托管任何类型的服务器的“正确”方式。

更大的问题是我用不同的端口号向我的机器发送链接。我同意他们必须使用我的机器名称 - 我假设我需要网络管理员添加一个 DNS 条目以将其命名为 TeamAwesome.company.com 而不是 machinename.company.com:8000?

更大的问题是,如果我做了一些花哨的东西,比如 Apache、Django 或 Flask 网络服务器,我是否可以像 machinename.company.com/trac 一样为 trac 服务器和 machinename.company.com/hg/project1 设置它对于 project1 的 HG 存储库?我正在研究 Apache、Django 和 Flask,因为我已经潜入 Python 2 年了,它们似乎最适合我的需求。

我知道理想情况下,这些东西应该托管在单独的 linux-y 服务器机器上,但我需要证明我正在开发的工具的有用性,然后再向我的老板(他雇用我做工程,而不是编程,或网络开发,或系统管理等)。

我看到this 看起来很相关。 http 代理、虚拟主机、nginx 和 WebSockets 有什么值得关注的吗?

查看Apache VirtualHost examples 看起来很有希望,但我无法解读其中一个示例是否真的符合我所说的。感谢您在我用这些东西进一步深入兔子洞时提出的任何建议!

【问题讨论】:

【参考方案1】:

Apache 虚拟主机只能通过监听 ip 和/或端口号来区分。 如果您希望/让这些服务也单独运行,mod_proxy 模块可以做您想做的事情:

 ProxyRequests Off
 <Proxy *>
     Allow from all
 </Proxy>

 ProxyPass      /folder_a       http://backend_a:1234/ retry=5
 ProxyPass      /folder_b       http://backend_b:8888/ retry=5
 # etc

但是,如果您只想将不同的 url 指向服务器上不相关的文件夹,请检查 Location 和 Alias 指令

【讨论】:

【参考方案2】:

无需代理设置。您可以使用单个虚拟服务器,但在某个子目录下运行每个应用程序:例如,对于 Django 或其他 wsgi 应用程序,您只需将 WSGIScriptAlias 设置为相关目录。

不过,有一个重要的说明:Django 绝不是服务器。事实上,您需要 Apache 或同等产品才能正确地为 Django 提供服务。

【讨论】:

我想我明白你的意思,如果我的 wsgi 应用程序是一个 python 模块或者可以在查询给定子目录时调用的东西,但是如果我的应用程序是在某个端口上运行的另一台服务器呢?存储库、网络服务器等所有服务器服务都可以作为 wsgi 应用程序存在吗?即使我可以将一些服务直接绑定到网络服务器,我仍然希望能够提供类似文件夹的访问权限,以访问在本地端口上单独提供的内容,因为这听起来很有用。还是我没有抓住重点?

以上是关于如何在单台机器上管理/组合多台服务器?的主要内容,如果未能解决你的问题,请参考以下文章

elasticsearch 集群详解

将 Ansible 剧本安全地限制在单台机器上?

如何使 c# windows 窗体应用程序仅在单台 PC 上运行?

我可以在单机上使用硒网格吗

避免在多台机器中重复增加 SERIAL 列

尝试在单台 Mac 机器上使用并行 Jenkins 管道构建 iOS 应用程序时出现缓存问题