0

Я развернул приложение REST Spring Boot как WAR в AWS Elastic Beanstalk Tomcat 8 + Java 8. Впоследствии я понял, что мне нужно настроить следующие параметры (относится к Tomcat server.xml):Обновление конфигурации при запуске ElasticBeanstalk Экземпляр Tomcat

compression="on" 
compressionMinSize="2048" 
compressableMimeType="text/html,text/css,..." 

потому application.properties в Spring ботинке относится только к встроенным контейнерам Tomcat. Сейчас слишком поздно менять тип платформы экземпляра Elastic Beanstalk. Есть ли способ обновить конфигурацию из CLI Elastic Beanstalk, используя eb config? Я смотрел на это AWS page, и похоже, что это возможно.

Обновлено 01/16/2017 Благодаря ответ от @ DAVE-клена я начал искать в соответствующих частях Elastic Beanstalk документации.

Во-первых, я обнаружил, что Apache является прокси-сервером по умолчанию. Я мог бы изменить его на nginx, но у меня не было никаких особых оснований идти по этому маршруту.

Во-вторых, я обнаружил, что добавление папки .ebextensions на верхний уровень моего проекта Spring Boot. Я не хотел pollute моя база кода с конкретным конфигурационным файлом провайдера облака, но это, казалось, самый низкий висящий плод. Поэтому я пошел на это.

я добавил следующую иерархию:

MySpringBootProject 
| 
+- src 
    | 
    +- main 
     | 
     +- resources 
      | 
      +- ebextensions 
       | 
       +- httpd 
       | | 
       | +- conf.d 
       |  | 
       |  +- enable_mod_deflate.conf 
       | 
       +- myapp.config 
       | 
       +- tomcat-settings.config 

СодержаниеTOMCAT-settings.config

option_settings: 
    aws:elasticbeanstalk:environment:proxy: 
    GzipCompression: 'true' 

Содержаниеmyapp.config

container_commands: 
05-restart-apache: 
    command: "sudo /etc/init.d/httpd restart" 

Содержаниеenable_mod_deflate.conf

# mod_deflate configuration 
<IfModule mod_deflate.c> 
    # Restrict compression to these MIME types 
    AddOutputFilterByType DEFLATE text/plain 
    AddOutputFilterByType DEFLATE text/html 
    AddOutputFilterByType DEFLATE application/xhtml+xml 
    AddOutputFilterByType DEFLATE text/xml 
    AddOutputFilterByType DEFLATE application/xml 
    AddOutputFilterByType DEFLATE application/xml+rss 
    AddOutputFilterByType DEFLATE application/x-javascript 
    AddOutputFilterByType DEFLATE text/javascript 
    AddOutputFilterByType DEFLATE text/css 
    AddOutputFilterByType DEFLATE image/png 
    AddOutputFilterByType DEFLATE image/gif 
    AddOutputFilterByType DEFLATE image/jpeg 

    # Level of compression (Highest 9 - Lowest 1) 
    DeflateCompressionLevel 9 

    # Netscape 4.x has some problems. 
    BrowserMatch ^Mozilla/4 gzip-only-text/html 

    # Netscape 4.06-4.08 have some more problems 
    BrowserMatch ^Mozilla/4\.0[678] no-gzip 

    # MSIE masquerades as Netscape, but it is fine 
    BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html 

    <IfModule mod_headers.c> 
    # Make sure proxies don't deliver the wrong content 
    Header append Vary User-Agent env=!dont-vary 
    </IfModule> 
</IfModule> 

Добавьте следующие строки вpom.xml (настроить .ebextensions папку верхнего уровня генерируемого файла WAR):

Я мог бы поклясться, что это сработало, потому что я видел Content-Encoding: gzip ответный заголовок ... всего пару раз. Любая идея, что может произойти?

ответ

1

Лучший способ реализации сжатия - это прокси-сервер nginx, который запускается перед tomcat. nginx более эффективен при этой операции. Для этого вы можете создать .ebextensions каталог в корне архива развертывания и добавьте nginx-proxy.config файл, например, следующее:

.ebextensions/Nginx-прокси.CONFIG

option_settings: 
    aws:elasticbeanstalk:environment:proxy: 
    GzipCompression: 'true' 
    ProxyServer: nginx 

Затем вы можете создать и развернуть новую версию приложения на Elastic Beanstalk.

Если вам нужно избегать простоев при развертывании новой версии, вы можете использовать rolling deployment (принимает экземпляры из LB перед развертыванием новых версий) или даже blue/green deployment (a new environment + cname swap).

=== РЕДАКТИРОВАТЬ ===

Вам может потребоваться настроить Content-Type значения, Nginx будет GZIP.

Чтобы GZIP все, создать конфигурационный файл в .ebextensions:

.ebextensions/gzip.config

files: 
    /etc/nginx/conf.d/gzip.conf: 
    content: | 
     gzip_types *; 

или быть более избирательным, определить типы вы хотите сжаты:

.ebextensions/gzip.config

files: 
    /etc/nginx/conf.d/gzip.conf: 
    content: | 
     gzip_types text/plain text/css application/json application/x-javascript text/xml; 
+0

Могу ли я применить это изменение конфигурации в экземпляре, который уже настроен и работает в настоящее время. Я могу позволить себе перезапуск приложения. То, что я пытаюсь избежать, это добавить это к моей базе кода. –

+0

Стандартный способ - использовать .ebextensions (потребуется обновление вашего пакета развертывания). –

+1

Я действительно смотрел, и я не вижу способа сделать это с помощью 'eb config' или' eb setenv' - эти команды, похоже, не поддерживают изменение настроек в пространстве имен aws: elasticbeanstalk: environment. –

Смежные вопросы