5.5. UberJAR 的代理服务配置

本章节介绍配置 Nginx HTTP-server 作为 CUBA Uber JAR 应用程序的代理。

NGINX

对于 Nginx,下面有两种配置方法,所有示例都在 Ubuntu 16.04 测试通过。

  1. Direct Proxy - 直接代理

  2. Redirect to Path - 转发路径

假设,web 应用程序运行在 http://localhost:8080/app

Uber JAR 应用程序使用 Jetty 9.2 web 服务器。需要提前在 JAR 中配置 Jetty 用来分发 Nginx headers。

Jetty 配置

  • 使用内部的 jetty.xml

    首先,在项目根目录创建 Jetty 配置文件 jetty.xml,拷贝以下代码:

    1. <?xml version="1.0" encoding="utf-8"?>
    2. <!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_0.dtd">
    3. <Configure id="Server" class="org.eclipse.jetty.server.Server">
    4. <New id="httpConfig" class="org.eclipse.jetty.server.HttpConfiguration">
    5. <Set name="outputBufferSize">32768</Set>
    6. <Set name="requestHeaderSize">8192</Set>
    7. <Set name="responseHeaderSize">8192</Set>
    8. <Call name="addCustomizer">
    9. <Arg>
    10. <New class="org.eclipse.jetty.server.ForwardedRequestCustomizer"/>
    11. </Arg>
    12. </Call>
    13. </New>
    14. <Call name="addConnector">
    15. <Arg>
    16. <New class="org.eclipse.jetty.server.ServerConnector">
    17. <Arg name="server">
    18. <Ref refid="Server"/>
    19. </Arg>
    20. <Arg name="factories">
    21. <Array type="org.eclipse.jetty.server.ConnectionFactory">
    22. <Item>
    23. <New class="org.eclipse.jetty.server.HttpConnectionFactory">
    24. <Arg name="config">
    25. <Ref refid="httpConfig"/>
    26. </Arg>
    27. </New>
    28. </Item>
    29. </Array>
    30. </Arg>
    31. <Set name="port">8080</Set>
    32. </New>
    33. </Arg>
    34. </Call>
    35. </Configure>

    build.gradle 中添加 webJettyConfPath 属性到 buildUberJar 任务:

    1. task buildUberJar(type: CubaUberJarBuilding) {
    2. singleJar = true
    3. coreJettyEnvPath = 'modules/core/web/META-INF/jetty-env.xml'
    4. appProperties = ['cuba.automaticDatabaseUpdate' : true]
    5. webJettyConfPath = 'jetty.xml'
    6. }

    可以在 Studio 中通过 Deployment > UberJAR Settings 来生成 jetty-env.xml 文件,或者用以下代码:

    1. <?xml version="1.0"?>
    2. <!DOCTYPE Configure PUBLIC "-" "http://www.eclipse.org/jetty/configure_9_0.dtd">
    3. <Configure id='wac' class="org.eclipse.jetty.webapp.WebAppContext">
    4. <New id="CubaDS" class="org.eclipse.jetty.plus.jndi.Resource">
    5. <Arg/>
    6. <Arg>jdbc/CubaDS</Arg>
    7. <Arg>
    8. <New class="org.apache.commons.dbcp2.BasicDataSource">
    9. <Set name="driverClassName">org.postgresql.Driver</Set>
    10. <Set name="url">jdbc:postgresql://<Host>/<Database></Set>
    11. <Set name="username"><User></Set>
    12. <Set name="password"><Password></Set>
    13. <Set name="maxIdle">2</Set>
    14. <Set name="maxTotal">20</Set>
    15. <Set name="maxWaitMillis">5000</Set>
    16. </New>
    17. </Arg>
    18. </New>
    19. </Configure>

    使用以下命令构建 Uber JAR:

    1. gradlew buildUberJar

    应用程序 JAR 包会被放置在 build/distributions/uberJar 目录,名称为 app.jar

    运行应用程序:

    1. java -jar app.jar

    按照 Tomcat 部分的介绍安装和配置 Nginx。

    按照选择配置 Nginx 的方法不同,可以通过 http://localhost/app 或者 http://localhost 地址访问应用。

  • 使用外部的 jetty.xml

    按照上面的描述使用和项目根目录的 jetty.xml 文件相同的配置文件。将这个文件放在其它目录,比如说用户主目录,不需要修改 build.gradle 里的 buildUberJar 任务。

    使用下列命令构建 Uber JAR:

    1. gradlew buildUberJar

    应用程序打包完了放在 build/distributions/uberJar 目录,默认名称是 app.jar

    首先,用带参数 -jettyConfPath 运行程序:

    1. java -jar app.jar -jettyConfPath jetty.xml

    然后按照 Tomcat 部分的介绍安装和配置 Nginx。

    按照选择配置 Nginx 的方法和 jetty.xml 文件的配置不同,可以通过 http://localhost/app 或者 http://localhost 地址访问应用。