AWS Elastic Beanstalkを使ってTomcatを動かします。その際にApacheもしくはnginxをプロキシサーバーとして指定することができるようになっています。
また、オプションとしてStaticファイルの指定、Gzipの有効化ができるようになっています。
Gzipの指定
.ebextensions/tomcat-settings.config
option_settings: - namespace: aws:elasticbeanstalk:environment:proxy option_name: GzipCompression value: true
のように指定すると、インスタンス上の設定が以下のようになります。
/etc/httpd/conf.d/elasticbeanstalk/01_gzip.conf
AddOutputFilterByType DEFLATE text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript
静的ファイルの指定
.ebextensions/tomcat-settings.config
option_settings: - namespace: aws:elasticbeanstalk:environment:proxy:staticfiles option_name: /images value: images - namespace: aws:elasticbeanstalk:environment:proxy:staticfiles option_name: /static value: static
のように指定すると以下のファイルが自動生成されます。
/etc/httpd/conf.d/elasticbeanstalk/02_static.conf
#Elastic Beanstalk Managed ProxyPass /images ! Alias /images /var/lib/tomcat7/webapps/ROOT/images <Directory /var/lib/tomcat7/webapps/ROOT/images> Order allow,deny Allow from all </Directory> ProxyPass /static ! Alias /static /var/lib/tomcat7/webapps/ROOT/static <Directory /var/lib/tomcat7/webapps/ROOT/static> Order allow,deny Allow from all </Directory>
ただし手元の環境ではContet-Typeの指定がおかしくなりました。
/etc/httpd/conf/httpd.conf
に対して以下を追記しました。
LoadModule mime_module modules/mod_mime.so TypesConfig /etc/mime.types
追記の仕方としてはファイルを置き換える方法しかないようです。
Beanstalkのベースとなるhttpd.confはだいぶスッキリしています。
/etc/httpd/conf/httpd.conf
# Managed by Elastic Beanstalk PidFile run/httpd.pid # Enable TCP keepclive Timeout 60 KeepAlive On MaxKeepAliveRequests 100 KeepAliveTimeout 60 <IfModule worker.c> StartServers 10 MinSpareThreads 250 MaxSpareThreads 250 ServerLimit 10 MaxClients 250 MaxRequestsPerChild 1000000 </IfModule> Listen 80 Include conf.d/*.conf Include conf.d/elasticbeanstalk/*.conf User apache Group apache CustomLog logs/access_log "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" TraceEnable off LoadModule alias_module modules/mod_alias.so LoadModule authz_host_module modules/mod_authz_host.so LoadModule log_config_module modules/mod_log_config.so LoadModule deflate_module modules/mod_deflate.so LoadModule headers_module modules/mod_headers.so LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_balancer_module modules/mod_proxy_balancer.so LoadModule proxy_ftp_module modules/mod_proxy_ftp.so LoadModule proxy_http_module modules/mod_proxy_http.so LoadModule proxy_ajp_module modules/mod_proxy_ajp.so LoadModule proxy_connect_module modules/mod_proxy_connect.so LoadModule cache_module modules/mod_cache.so
これをもとに
ServerSignature On ServerTokens Prod
などカスタマイズしたものを
.ebextensions/httpd/conf/httpd.conf
においておけば上書きされます。
また独自の拡張confを用意する場合には
.ebextensions/httpd/conf.d/hoge.conf
に置けばいいようです。
https://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/java-tomcat-platform.html
に詳しい内容が記載されています。
なお
.ebextensions/httpd/
にファイルを置き始めると、フォルダをごそっと上書きした上で 00_application.conf 01_gzip.conf 02_static.conf を生成するっぽいので、
.ebextensions/httpd/conf.d/elasticbeanstalk_log.conf
LogFormat "%h (%{X-Forwarded-For}i) %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" eb_access_log_format CustomLog /var/log/httpd/elasticbeanstalk-access_log eb_access_log_format
もおいておく必要があります。
Beanstalkは設定の書き換え後の反映サイクルに時間がかかるのでつらい。。。