代码之家  ›  专栏  ›  技术社区  ›  Stefan Falk

如何为不同子域上的多个web应用程序提供服务?

  •  2
  • Stefan Falk  · 技术社区  · 7 年前

    不确定标题是否合适,但我目前有三个应用程序(静态内容):

    • public
    • app
    • admin

    公众的 只是普通网络的内容, 应用程序 管理员 基本上是一种管理工具。 它们都包含在同一个Spring引导应用程序中 和其他人谈谈 example.com/api . 严格来说,我可以把它们放进 resources/static 以至于

    resources/static/public
    resources/static/admin
    resources/static/app
    

    这样我就可以访问这些应用程序:

    example.com/public/index.html
    example.com/admin/index.html
    example.com/app/index.html
    

    但是,我的目标是拥有以下结构:

          example.com     // For public
    admin.example.com     // For admin
      app.example.com     // For app
          example.com/api // REST API
    

    如何实现这一点,或者我可以做些什么来实现这一点?

    2 回复  |  直到 7 年前
        1
  •  2
  •   Jean Marois    7 年前

    听起来您有三个系统:public、admin和app共享一个公共restapi。最好的方法可能是使用内容交付网络为三个系统中的每个系统提供静态资源( CDN

    另一种方法虽然不太理想,但可以使用代理重定向应用程序请求(例如 https://admin.example.com https://internal-spring-boot-server/admin https://httpd.apache.org/docs/2.4/mod/mod_proxy.html ),或NGNX反向代理 https://docs.nginx.com/nginx/admin-guide/web-server/reverse-proxy/

        2
  •  1
  •   Christos Karapapas    7 年前

    我认为有两种方法可以实现你想做的事情。

    您可以在DNS-plesk/cpanel/中配置您的子域。。要查找特定的文档根目录(每个应用程序主目录的路径) 例如,当有人要求 example.com 请求将要求 example.com/main admin.example.com admin.example.com/admin 这样,您基本上忽略了Spring应用程序中的子域,并使用RequestMapping值main/admin/etc在@Controller级别操纵路由。。

    或者,如果您不想弄乱提供者的控制面板,可以按照的步骤进行操作 this 回答。但是接下来必须实现这三个定制的RequestCondition类,这可能不是最简单的方法。

    不是最好的答案,但我希望我给你指出了正确的方向。