如何将多个域重定向到相同的IP但不同的端口?

use*_*917 0 networking linux dns-hosting google-cloud-platform apache2

我想在运行于不同端口的同一虚拟机中安装许多带有 php 服务器的 Apache,因为我想将 N 个不同的网站托管到同一个虚拟机中,以避免创建 N 个虚拟机来托管 N 个网站。

是否有任何简单的 DNS 配置可以将不同的域重定向到不同端口中的相同 IP?

例子:

  • www.example1.com 172.217.14.100:80
  • www.example2.com 172.217.14.100:81
  • www.example3.com 172.217.14.100:82
  • www.example4.com 172.217.14.100:83

小智 5

据我所知,通过 DNS 记录无法实现您想要做的事情。

阿帕奇

Apache,通过名称基础虚拟主机块并将 Apache 配置为侦听所需的端口。

# Listens on all IP Addresses and ports 80 - 83    
  Listen 80
  Listen 81
  Listen 82
  Listen 83
Run Code Online (Sandbox Code Playgroud)

使用基于名称的虚拟主机允许您根据主机值中传递的名称捕获每个请求;

<virtualhost example1.com:80>

   # all your configuration for example1.com

</virtualhost>

<virtualhost example2.com:81>

   # all your configuration for example2.com

</virtualhost>
Run Code Online (Sandbox Code Playgroud)

港口

要求用户输入端口并不是一个好的解决方案,从长远来看很可能会失败。我们不能依赖用户知道如何添加端口,甚至记住他们需要添加端口。

Nginx 反向代理

更好的解决方案是使用 Nginx 作为前端,它接收请求并使用您需要的端口结构将该请求传递给 Apache。

Server {

         listen 80;
         server_name example1.com www.example1.com

         # other stuff as required

         proxy_pass http://192.168.100:80;
}

Server {

         listen 81;
         server_name example2.com www.example2.com

         # other stuff as required

         proxy_pass http://192.168.100:81;
} 
Run Code Online (Sandbox Code Playgroud)

通过使用 Nginx,客户端输入 example2.com(无端口),Nginx 接收它、处理它并从端口 81 上侦听的 Apache 获取结果。

Nginx 反向代理

Nginx 还将给你带来性能提升。有一个学习曲线和一些配置微调要做,但从长远来看,这将是一个更好的解决方案。

有数百个使用 Nginx 的反向代理示例。谷歌是你的朋友。