如何在 ubuntu 20.04 上的 apache2 中设置子域?

如何在 ubuntu 20.04 上的 apache2 中设置子域?

我有一个在端口 80 上运行的 apache 服务器,我想让一个子域指向同一台服务器上的端口 3000。端口 3000 上的服务器是 ruby​​ on rails 服务器,但理想情况下,我可以在端口 80 上的 apache2 上托管我的主网站,然后托管一个子域,如 api.mycompany.com,专门处理端口 3000 上的 API 请求。我该怎么做?

答案1

创建两个指向同一服务器的 A 记录

示例.com--> 87.45.34.31 (替换为您的服务器的 IP 地址)
api.example.com--> 87.45.34.31 (替换为您的 IP)

创建一个虚拟主机对于 Apache 上的域名 example.com,为您的前端静态文件指向 /var/www/html。创建另一个虚拟主机对于 api.example.com,在端口 localhost:3000 上使用反向代理

一些参考:- https://www.digitalocean.com/community/tutorials/how-to-use-apache-http-server-as-reverse-proxy-using-mod_proxy-extension

答案2

一种方法是使用 Apache 作为所谓的“反向代理”。这基本上就是告诉 Apache 服务器“无论进入此虚拟主机的内容是什么,都将其发送到 1.2.3.4:3000,并传递来自那里的响应”。

对于 Apache,这可以通过模块来完成,它提供像ProxyPassReverse apache2ctl -M proxy_module (shared)'mod_proxy这样的指令。ProxyPass. The module should have been installed with your standard Apache setup. You can check whether the output ofcontains something along the lines of

然后,设置一个额外的虚拟主机来处理主机名api.mycompany.com。在此虚拟主机中,设置反向代理

ProxyPass "/"  "http://127.0.0.1:3000"
ProxyPassReverse "/"  "http://127.0.0.1:3000"

http://127.0.0.1:3000假设您的 Rails 应用程序正在从服务器的角度运行。

根据你的 Rails 应用的具体需求,可能还需要考虑其他因素(例如ProxyPreserveHost,仅举一例)。但这是基本原则。

一些额外的想法:

  • 不要忘记检查是否有 DNS 记录api.mycompany.com,以及该记录是否指向您的服务器。
  • 确保运行 Rails 应用程序的服务器只能从localhost(127.0.0.1和之间的某个地址127.255.255.254) 访问。不再需要让应用程序从公共 IP 访问,这是 Apache 的工作。

相关内容