7.5. Конфигурация прокси для Uber JAR

В этой части рассказывается, как настроить HTTP-сервер Nginx в качестве прокси для приложения CUBA Uber JAR.

NGINX

Для Nginx предлагается 2 конфигурации проксирования, описанных ниже. Все примеры подготовлены и проверены на Ubuntu 16.04.

  1. Прямое проксирование

  2. Проксирование с перенаправлением

К примеру, ваше веб-приложение работает по ссылке http://localhost:8080/app.

Tip

Приложение Uber JAR использует сервер Jetty версии 9.2. Jetty внутри JAR следует сконфигурировать таким образом, чтобы он обрабатывал заголовки Nginx.

Настройка Jetty
  • Настройка внутри JAR

    Сначала создайте конфигурационный файл 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>

    Добавьте свойство webJettyConfPath в задачу buildUberJar вашего файла build.gradle:

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

    Вы можете использовать Studio, чтобы сгенерировать jetty-env.xml, для этого пройдите в Project Properties > Deployment Settings > далее на вкладку Uber Jar. Или используйте пример ниже:

    <?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

    Ваше приложение будет расположено в папке build/distributions/uberJar, имя по-умолчанию: app.jar.

    Запустите приложение:

    java -jar app.jar

    Затем установите и настройте Nginx, как описано в секции Tomcat.

    В зависимости от выбранной схемы проксирования, ваш сайт будет доступен по одной из ссылок: http://localhost/app или http://localhost.

  • Настройка с помощью внешнего файла

    Используйте тот же самый конфигурационный файл jetty.xml в корне проекта, как описано выше, но не изменяйте build.gradle.

    Соберите Uber JAR, используя следующую команду:

    gradlew buildUberJar

    Ваше приложение будет расположено в папке build/distributions/uberJar, имя по-умолчанию: app.jar.

    Запустите приложение с параметром -jettyConfPath:

    java -jar app.jar -jettyConfPath jetty.xml

    Затем установите и настройте Nginx, как описано в секции Tomcat.

    В зависимости от выбранной схемы проксирования и настроек в jetty.xml, ваш сайт будет доступен по одной из ссылок: http://localhost/app или http://localhost.