【问题标题】:Multiple application on single PC一台PC上的多个应用程序
【发布时间】:2021-12-15 11:12:40
【问题描述】:

我已在 IP 127.0.0.1 的服务器 PC 上安装 Tomcat 服务器 一个应用程序正在服务器上运行。让应用程序的地址是:127.0.0.1:8080/first-project 现在如果我想在同一台服务器上运行另一个应用程序,地址将是:127.0.0.1:8080/second -项目

我想要具有多个地址的多个应用程序,例如 127.0.0.1127.0.0.2

a) 是否可以在一台 PC 上拥有多个地址

b) 在同一台服务器上运行多台服务器的最佳做法是什么?如何做到这一点?

  1. 使用不同的 IP 地址(127.0.0.1、127.0.0.2)
  2. IP 地址相同但端口不同(127.0.0.1:8080、127.0.0.1:8081)
  3. 具有相同 IP 不同路径(127.0.0.1/first、127.0.0.1/second)

任何资源链接都会有所帮助。提前致谢。

【问题讨论】:

  • 拥有多个端口,而不是多个地址。例如,第一个应用程序为 127.0.0.1/8000,第二个应用程序为 127.0.0.1/8001,依此类推。所以第二个选项应该做。
  • 不同的端口号总是更好
  • 三个选项都有效。此外,您可以使用不同的主机名而不是不同的 IP 地址。您选择哪个选项主要是见仁见智。

标签: java spring tomcat server ip


【解决方案1】:

不是网络专家,但我建议您以下内容

  1. 您可以在同一台服务器上运行多个应用程序,在同一个Tomcat Server 中,但您必须设置不同的端口。示例:http://localhost:8080/http://localhost:8082/http://localhost:8084/
  2. 您可以在Docker 中运行您的应用程序。然后,您将能够在具有自己的IP address 的隔离容器中运行您的应用程序。使用Docker,您可以使用docker-compose 运行多个容器
  3. 您可以在不同的virtual machines 中运行您的应用程序。您将能够使用自己的 IP address 配置每个虚拟机,以便与您的 host 或从外部位置进行交互。
  4. 您可以在single 网卡上拥有多个IP address

【讨论】:

  • 感谢您的回答。哪一个更好?对我来说,2、3 看起来更好。
  • 我还建议解决方案3。这是一个很好的实践,在业界非常流行,主要在microservice架构中。
【解决方案2】:

当然,每个主机都可以有多个 IP 地址。例如,您可以通过127.0.0.0-127.255.255.255 范围内的任何地址引用本地计算机。

你的所有配置都是可能的,在开发环境中选择它们是一个品味问题。

从最小的 Tomcat Service 配置开始:

  <Service name="Catalina">
    <Connector address="127.0.0.1" port="80"/>
    <Engine name="Catalina" defaultHost="dev.localhost">
      <Host name="dev.localhost"  appBase="webapps/dev.localhost"/>
      </Host>
    </Engine>
  </Service>

你可以:

  1. 通过配置两个服务(IP-based virtual hosting)来配置Tomcat监听两个IP地址:
    <Service name="Catalina-127.0.0.1">
      <Connector address="127.0.0.1" port="80"/>
      <Engine name="Catalina-127.0.0.1" defaultHost="localhost">
        <Host name="localhost"  appBase="webapps/127.0.0.1"/>
      </Engine>
    </Service>
    <Service name="Catalina-127.0.0.2">
      <Connector address="127.0.0.2" port="80"/>
      <Engine name="Catalina-127.0.0.2" defaultHost="localhost">
        <Host name="localhost"  appBase="webapps/127.0.0.2"/>
      </Engine>
    </Service>
    
  2. 通过配置两个服务(Port-based virtual hosting)来配置Tomcat监听两个不同的端口:
    <Service name="Catalina-8080">
      <Connector port="8080"/>
      <Engine name="Catalina-8080" defaultHost="localhost">
        <Host name="localhost"  appBase="webapps/8080"/>
      </Engine>
    </Service>
    <Service name="Catalina-8081">
      <Connector port="8081"/>
      <Engine name="Catalina-8081" defaultHost="localhost">
        <Host name="localhost"  appBase="webapps/8081"/>
      </Engine>
    </Service>
    
  3. 为 Tomcat 配置两个虚拟主机 (Name-based virtual hosting):
    <Service name="Catalina">
      <Connector port="80"/>
      <Engine name="Catalina" defaultHost="host1.localhost">
        <Host name="host1.localhost"  appBase="webapps/host1.localhost"/>
        <Host name="host2.localhost"  appBase="webapps/host2.localhost"/>
      </Engine>
    </Service>
    
  4. 使用两种不同的上下文路径:只需根据上下文路径命名您的 WAR 文件,将斜杠 / 替换为哈希 #

备注:在生产服务器上:

  • 选项 1(基于 IP 的虚拟主机)通常被丢弃,因为公共 IP 地址很昂贵(尽管 IPv6 地址不是...),
  • 选项 2(基于端口的虚拟主机)通常被丢弃,因为非标准端口上的网站不容易被搜索引擎机器人扫描并且可能被认为是不合法的(每个 UNIX 用户都可以在端口 8080 上运行服务器, 仅在端口 80 上 root)。如果您使用非标准端口,您可能需要使用反向代理。
  • 使用非空上下文路径运行应用程序可能是一个好习惯,这样任何阻止应用程序使用非空路径运行的错误(例如,不包含上下文路径的绝对链接)都会在测试期间被发现。

【讨论】:

    【解决方案3】:

    您不能在一台机器上拥有多个 IP 地址,这就是端口的用途。您在application.properties 中为应用程序分配一个端口,例如。 server.port = 8081.

    现在,路径由Controllers 及其方法分配,例如。

    @Controller("/first")
    publc class FirstController {
    
        @GetMapping("/hello")
        public String hello() {
            return "Hello world!";
        }
    }
    

    编辑 我认为您在谈论上下文路径,您也可以在 application.properties 中指定,如下所示:server.servlet.context-path = /mycontext

    【讨论】:

    • “你不能在一台机器上有多个 ip 地址”:是的,你可以。事实上,127.X.Y.Z 形式的所有地址都被路由到机器本身。
    • 我知道这些路径。但是还有另一个路径是在服务器上运行的项目名称。该路径位于您在答案中提到的路径之前。
    • @Partho63 我已对我的答案添加了编辑
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-19
    • 1970-01-01
    • 1970-01-01
    • 2018-09-04
    • 2012-08-22
    • 1970-01-01
    相关资源
    最近更新 更多