![如何在单个服务器/单个端口上运行采用不同技术的多个 Web 服务器?](https://linux22.com/image/704320/%E5%A6%82%E4%BD%95%E5%9C%A8%E5%8D%95%E4%B8%AA%E6%9C%8D%E5%8A%A1%E5%99%A8%2F%E5%8D%95%E4%B8%AA%E7%AB%AF%E5%8F%A3%E4%B8%8A%E8%BF%90%E8%A1%8C%E9%87%87%E7%94%A8%E4%B8%8D%E5%90%8C%E6%8A%80%E6%9C%AF%E7%9A%84%E5%A4%9A%E4%B8%AA%20Web%20%E6%9C%8D%E5%8A%A1%E5%99%A8%EF%BC%9F.png)
我在 hetzner.de 上有一台 Ubuntu 机器,我在那里托管我的所有服务,包括
i. 多站点 wordpress(多个网站在端口 80 上的单个 wordpress 实例上运行
ii. Jira 实例当前在 80 以外的端口上运行(例如 8084)
iii. 在不同的端口上托管我的自定义应用程序的 tomcat 等等。
我需要映射一个 uri,以便所有这些服务都可以通过单个端口 80 访问。例如
假设我的域名是 xyz.com 指向这台机器,我想访问我的所有服务,例如
xyz.com/wordpress1 xyz.com/wordpress2 xyz.com/tomcat/web1 xyz.com/jira
有什么线索可以告诉我如何实现这一目标吗?
答案1
使用 Apache 或 nginx 作为反向代理。
答案2
任何时候都只能有一个软件绑定到特定端口。
Nginx(和 Apache)可用作反向代理。并非所有应用程序都适合放在子目录中,这是开发人员需要考虑的问题。
如果您有 DNS 访问权限,则可以使用子域名解决此问题。
这是一个带有子域名的示例https://stackoverflow.com/questions/13240840/nginx-reverse-proxy-multiple-backends
这里有子目录,你问的nginx proxy_pass 使用子文件夹
答案3
在我看来,实现这一点的最简单方法是使用 URI ACL 的 HAProxy。您可以让后端应用程序监听 80 以外的端口,并让 HAPROXY 监听 80。然后根据 URI 请求(例如 site.com/URI)路由请求,但如前所述,您的应用程序需要知道 URI 路径,如果它不知道,那么子域将是使用域 ACL 的方法。