7.4. Конфигурация прокси для Tomcat

Для задач интеграции может потребоваться прокси-сервер. В этом разделе описывается конфигурация HTTP-сервера Nginx в качестве прокси для приложения на платформе CUBA.

Tip

Если вы настраиваете прокси, то не забудьте задать значение в параметре cuba.webAppUrl.

NGINX

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

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

Tip

Кроме Nginx следует настроить еще и Tomcat.

Настройка Tomcat

Сначала добавьте в конфигурационный файл Tomcat conf/server.xml следующий код:

<Valve className="org.apache.catalina.valves.RemoteIpValve"
        remoteIpHeader="X-Forwarded-For"
        requestAttributesEnabled="true"
        internalProxies="127\.0\.0\.1"  />

и перезапустите Tomcat:

sudo service tomcat8 restart

Это требуется для того, чтобы Tomcat мог обрабатывать заголовки от Nginx без модификации веб-приложения.

Затем установите Nginx:

sudo apt-get install nginx

Откройте в браузере ссылку http://localhost и убедитесь, что стартовая страница Nginx работает.

Теперь вы можете удалить символьную ссылку на тестовый сайт Nginx:

rm /etc/nginx/sites-enabled/default

Далее сконфигурируйте прокси одной из выбранных схем:

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

В этом случае все запросы обрабатывает прокси, прозрачно перенаправляя их в приложение.

Создайте конфигурационный файл Nginx /etc/nginx/sites-enabled/direct_proxy:

server {
    listen 80;
    server_name localhost;

    location /app/ {
        proxy_set_header Host               $host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-Proto  $scheme;

        # Required to send real client IP to application server
        proxy_set_header X-Forwarded-For    $proxy_add_x_forwarded_for;
        proxy_set_header X-Real-IP          $remote_addr;

        # Optional timeouts
        proxy_read_timeout      3600;
        proxy_connect_timeout   240;
        proxy_http_version      1.1;

        # Required for WebSocket:
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        proxy_pass              http://127.0.0.1:8080/app/;
    }
}

и перезапустите Nginx:

sudo service nginx restart

Вы можете открыть свой сайт по ссылке http://localhost/app.

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

В этом примере описано, как изменить путь к приложению в URL с /app на /, как если бы приложение было развёрнуто в корневом контексте (аналог /ROOT). Это позволит вам обращаться к приложению по адресу http://localhost.

Создайте конфигурационный файл Nginx /etc/nginx/sites-enabled/direct_proxy:

server {
    listen 80;
    server_name localhost;

    location / {
        proxy_set_header Host               $host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-Proto  $scheme;

        # Required to send real client IP to application server
        proxy_set_header X-Forwarded-For    $proxy_add_x_forwarded_for;
        proxy_set_header X-Real-IP          $remote_addr;

        # Optional timeouts
        proxy_read_timeout      3600;
        proxy_connect_timeout   240;
        proxy_http_version      1.1;

        # Required for WebSocket:
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        proxy_pass              http://127.0.0.1:8080/app/;

        # Required for folder redirect
        proxy_cookie_path       /app /;
        proxy_set_header Cookie $http_cookie;
        proxy_redirect http://localhost/app/ http://localhost/;
    }
}

и перезапустите Nginx

sudo service nginx restart

Ваше приложение доступно по ссылке http://localhost.

Tip

Обратите внимание, что аналогичные инструкции развертывания прокси справедливы для конфигураций Jetty, WildFly и др. В таких случаях вам может понадобиться дополнительная конфигурация этих серверов.