5.5. UberJAR 的代理服务配置
本章节介绍配置 Nginx HTTP-server 作为 CUBA Uber JAR 应用程序的代理。
NGINX
对于 Nginx,下面有两种配置方法,所有示例都在 Ubuntu 16.04 测试通过。
Direct Proxy - 直接代理
Redirect to Path - 转发路径
假设,web 应用程序运行在 http://localhost:8080/app
。
Uber JAR 应用程序使用 Jetty 9.2 web 服务器。需要提前在 JAR 中配置 Jetty 用来分发 Nginx headers。 |
Jetty 配置
使用内部的 jetty.xml
首先,在项目根目录创建 Jetty 配置文件
jetty.xml
,拷贝以下代码:<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_0.dtd">
<Configure id="Server" class="org.eclipse.jetty.server.Server">
<New id="httpConfig" class="org.eclipse.jetty.server.HttpConfiguration">
<Set name="outputBufferSize">32768</Set>
<Set name="requestHeaderSize">8192</Set>
<Set name="responseHeaderSize">8192</Set>
<Call name="addCustomizer">
<Arg>
<New class="org.eclipse.jetty.server.ForwardedRequestCustomizer"/>
</Arg>
</Call>
</New>
<Call name="addConnector">
<Arg>
<New class="org.eclipse.jetty.server.ServerConnector">
<Arg name="server">
<Ref refid="Server"/>
</Arg>
<Arg name="factories">
<Array type="org.eclipse.jetty.server.ConnectionFactory">
<Item>
<New class="org.eclipse.jetty.server.HttpConnectionFactory">
<Arg name="config">
<Ref refid="httpConfig"/>
</Arg>
</New>
</Item>
</Array>
</Arg>
<Set name="port">8080</Set>
</New>
</Arg>
</Call>
</Configure>
在
build.gradle
中添加webJettyConfPath
属性到buildUberJar
任务:task buildUberJar(type: CubaUberJarBuilding) {
singleJar = true
coreJettyEnvPath = 'modules/core/web/META-INF/jetty-env.xml'
appProperties = ['cuba.automaticDatabaseUpdate' : true]
webJettyConfPath = 'jetty.xml'
}
可以在 Studio 中通过 Deployment > UberJAR Settings 来生成
jetty-env.xml
文件,或者用以下代码:<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-" "http://www.eclipse.org/jetty/configure_9_0.dtd">
<Configure id='wac' class="org.eclipse.jetty.webapp.WebAppContext">
<New id="CubaDS" class="org.eclipse.jetty.plus.jndi.Resource">
<Arg/>
<Arg>jdbc/CubaDS</Arg>
<Arg>
<New class="org.apache.commons.dbcp2.BasicDataSource">
<Set name="driverClassName">org.postgresql.Driver</Set>
<Set name="url">jdbc:postgresql://<Host>/<Database></Set>
<Set name="username"><User></Set>
<Set name="password"><Password></Set>
<Set name="maxIdle">2</Set>
<Set name="maxTotal">20</Set>
<Set name="maxWaitMillis">5000</Set>
</New>
</Arg>
</New>
</Configure>
使用以下命令构建 Uber JAR:
gradlew buildUberJar
应用程序 JAR 包会被放置在
build/distributions/uberJar
目录,名称为app.jar
。运行应用程序:
java -jar app.jar
按照 Tomcat 部分的介绍安装和配置 Nginx。
按照选择配置 Nginx 的方法不同,可以通过
http://localhost/app
或者http://localhost
地址访问应用。使用外部的 jetty.xml
按照上面的描述使用和项目根目录的
jetty.xml
文件相同的配置文件。将这个文件放在其它目录,比如说用户主目录,不需要修改build.gradle
里的buildUberJar
任务。使用下列命令构建 Uber JAR:
gradlew buildUberJar
应用程序打包完了放在
build/distributions/uberJar
目录,默认名称是app.jar
。首先,用带参数
-jettyConfPath
运行程序:java -jar app.jar -jettyConfPath jetty.xml
然后按照 Tomcat 部分的介绍安装和配置 Nginx。
按照选择配置 Nginx 的方法和
jetty.xml
文件的配置不同,可以通过http://localhost/app
或者http://localhost
地址访问应用。