[AWS]最新版のApache2.4のインストール【Amazon Linux 2023】


1. 準備作業

(1) /etc/mime.types
「/etc/mime.types」パッケージが必要なのでインストールします。
なお、この「/etc/mime.types」は「mailcap」パッケージに含まれます。
$ sudo dnf install mailcap

(2) nghttp2
「libnghttp2」をインストールします。
※依存性関連で「libev」と「libnghttp2」もインストールされます。
※ELBを使用する場合にはインストールしないので、この項目をスキップして下さい。

$ sudo dnf install nghttp2
$ sudo dnf install libev-devel
$ sudo dnf install libnghttp2-devel

(3) openldap-devel
httpd-develをインストールする場合に必要です。
※httpd-develをインストールしない場合には不要です。
$ sudo dnf install openldap-devel

(4) expat-devel
httpd-develをインストールする場合に必要です。
※httpd-develをインストールしない場合には不要です。
$ sudo dnf install expat-devel

(5) libdb-devel
httpd-develをインストールする場合に必要です。
※httpd-develをインストールしない場合には不要です。
$ sudo dnf install libdb-devel

2. Apache2.4のインストール

$ sudo dnf install httpd
$ sudo dnf install httpd-devel
※「httpd-devel」のインストールは任意です。

※ELBを使用する場合にはインストールしないので、この項目をスキップして下さい。
$ sudo dnf install mod_ssl

3. 各ファイルの設定

ここでは一例を挙げます。サーバの環境や使用目的などによって任意に変更して下さい。
(1) /etc/httpd/conf/httpd.conf
ServerAdmin webmaster@example.jp
ServerName www.example.jp:80
<Directory "/var/www/html">
    Options FollowSymLinks IncludesNOEXEC
    AllowOverride All
    Require all granted
</Directory>
※ELB経由の場合にはELBのIPアドレスが記録されてしまうので、「X-Forwarded-For」ヘッダを追記します。
これによりきちんとアクセス元のIPアドレスが記録されます。
#LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%{X-Forwarded-For}i %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

ELBを使用している場合には、ELB-HealthCheckerのログが大量に書き込まれるので、これを抑止します。
SetEnvIf User-Agent "ELB-HealthChecker.*" nolog
CustomLog logs/access_log combined env=!nolog

CGIを使用しない場合には、この関連の記述をコメントアウトします。
<IfModule alias_module>
#    ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
</IfModule>
#<Directory "/var/www/cgi-bin">
#    AllowOverride None
#    Options None
#    Require all granted
#</Directory>

拡張子「.html」でSSIを使用する場合に記述します。(パフォーマンスに影響を与える可能性があるので、使用には注意して下さい。)
#AddType text/html .shtml
#AddOutputFilter INCLUDES .shtml
AddOutputFilter INCLUDES .html

#AddDefaultCharset UTF-8
AddDefaultCharset Off

■追加設定(「IncludeOptional conf.d/*.conf」の前に追加)
#################################################
########### Additional Options ##################
#################################################
KeepAlive On
KeepAliveTimeout 120
MaxKeepAliveRequests 100
Timeout 120
AcceptFilter http none
AcceptFilter https none
ServerTokens Prod
ExtendedStatus Off
ServerSignature Off
UseCanonicalName Off
TraceEnable Off
Header always append X-Frame-Options SAMEORIGIN
# XSS対策
Header set X-XSS-Protection "1;mode=block"
Header set X-Content-Type-Options nosniff

■追加設定(VirtualHostで記述)
※ELBを使用する場合には、常時SSLの設定はELBで行うので、「Header ~」の行のみで良いです。
$ sudo vi /etc/httpd/conf.d/_virtualhost.conf
<VirtualHost *:80>
  <IfModule mod_rewrite.c>
    RewriteEngine On
    # X-Forwarded-Proto=httpを記述しないとリダイレクトのループが起こるため必ず記載する
    RewriteCond %{HTTP:X-Forwarded-Proto} =http
    RewriteRule .* https://%{HTTP:Host}%{REQUEST_URI} [L,R=permanent]
  </IfModule>
  Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
</VirtualHost>
※ELBを使用する場合
<VirtualHost *:80>
  Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
</VirtualHost>

(2) /etc/httpd/conf.d/autoindex.conf
Index機能は無効にしているので、このファイルをリネームします。
$ cd /etc/httpd/conf.d
$ sudo mv autoindex.conf{,.bak} 

(3) /etc/httpd/conf.d/ssl.conf
GlobalSign SSLサーバ証明書のインストールを参照して設定して下さい。
※ELBを使用する場合にはインストールしないので、この項目をスキップして下さい。

なお、1台のサーバに複数の証明書をインストールするSNI(Server Name Indication)を行う場合には、以下のように変更して下さい。
#<VirtualHost _default_:443>
<VirtualHost *:443>

■その他の設定変更
#SSLProtocol all -SSLv3
#SSLProxyProtocol all -SSLv3
SSLProtocol -all +TLSv1.2 +TLSv1.3
SSLProxyProtocol -all +TLSv1.2 +TLSv1.3
#SSLCipherSuite HIGH:MEDIUM:!MD5:!RC4
#SSLProxyCipherSuite HIGH:MEDIUM:!MD5:!RC4
SSLCipherSuite HIGH:!MEDIUM:!3DES:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:!DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
SSLCipherSuite HIGH:!MEDIUM:!3DES:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:!DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
※「DES-CBC3-SHA」を無効にします。

■設定追加
<Directory "/var/www/html">
    Options FollowSymLinks IncludesNOEXEC
    AllowOverride All
    Require all granted
</Directory>
 
<IfModule http2_module>
    ProtocolsHonorOrder On
    Protocols h2 http/1.1
</IfModule>
 
TraceEnable Off

(4) /etc/httpd/conf.d/userdir.conf
ユーザディレクトリ機能は使用しないのでリネームします。
※使用する場合には有効にして下さい。
$ cd /etc/httpd/conf.d
$ sudo mv userdir.conf{,.bak} 

(5) /etc/httpd/conf.modules.d/00-dav.conf
WebDAV機能は使用しないのでリネームします。
※使用する場合には有効にして下さい。
$ cd /etc/httpd/conf.modules.d
$ sudo mv 00-dav.conf{,.bak} 

(6) /etc/httpd/conf.modules.d/00-lua.conf
mod_luaは組み込み系スクリプト言語です。この機能も使用しないのでリネームします。
$ cd /etc/httpd/conf.modules.d
$ sudo mv 00-lua.conf{,.bak} 

(7) /etc/httpd/conf.modules.d/00-mpm.conf
ApacheのMPMを「event」に変更します。
#LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
#LoadModule mpm_worker_module modules/mod_mpm_worker.so
LoadModule mpm_event_module modules/mod_mpm_event.so

(8) /etc/httpd/conf.modules.d/01-cgi.conf
CGI機能は使用しないのでリネームします。
※使用する場合には有効にして下さい。
$ cd /etc/httpd/conf.modules.d
$ sudo mv 01-cgi.conf{,.bak} 

(9) /etc/httpd/conf.modules.d/10-h2.conf
※ELBを使用する場合には不要なので、必ず無効にしておきます。
$ cd /etc/httpd/conf.modules.d
$ sudo mv 10-h2.conf{,.bak} 

(10) /etc/httpd/conf.modules.d/10-proxy_h2.conf
※ELBを使用する場合には不要なので、必ず無効にしておきます。
$ cd /etc/httpd/conf.modules.d
$ sudo mv 10-proxy_h2.conf{,.bak} 

(11) 設定ファイルのエラーチェック
設定ファイルにエラーがないかどうかチェックします。
$ sudo apachectl configtest
「Syntax OK」が表示されたら文法的なエラーはありません。
Syntax OK
※文法的なエラーが表示されたら、エラーが表示されなくなるまで修正を行います。

4. サービスの起動

httpdサービスを起動します。
■ サービスの起動
$ sudo systemctl start httpd.service
■ サービスの自動起動設定
$ sudo systemctl enable httpd.service
その他のコマンド
■ サービスの停止
$ sudo systemctl stop httpd.service
■ サービスの自動起動解除
$ sudo systemctl disable httpd.service
■ サービスが自動起動かどうかチェック
$ sudo systemctl is-enabled httpd.service

5. ログの自動整理の解除

(1) logrotateの無効化
logrotateでApacheのログは自動的に整理されますが、自分がスクリプトで管理している場合には、自動的に整理されると不都合を生じますので、この機能を解除します。

「/etc/logrotate.d」というディレクトリの中に「httpd」というファイルがあります。
/var/log/httpd/*log {
    missingok
    notifempty
    sharedscripts
    postrotate
        /sbin/service httpd reload > /dev/null 2>/dev/null || true
    endscript
}

Apacheのログを週ごとに整理したくない場合には、行頭に#を付けて、コメントアウトします。
※ファイルを削除しても、また作成されるようです。
$ sudo vi /etc/logrotate.d/httpd

【ファイルの修正】
#/var/log/httpd/*log {
#    missingok
#    notifempty
#    sharedscripts
#    postrotate
#        /sbin/service httpd reload > /dev/null 2>/dev/null || true
#    endscript
#}
 

念のため、パーミッションを000に変更します。
$ sudo chmod 000 /etc/logrotate.d/httpd

(2) ログの整理スクリプト(例)
loglotateを無効化した場合は、ログがずっと蓄積されてファイルが肥大化してしまうので、スクリプトを実行して整理します。

【参考例】
「/var/__backup__/apache_log」に年月フォルダを作成して、そこにログファイルを圧縮して保管します。
#!/bin/bash

#----- backup file save base directory -----
BACKUP_BASE_DIR=/var/__backup__/apache_log
LOG_DIR=/var/log
APACHE_LOG_DIR=/var/log/httpd
#-------------------------------------------

#----- backup file save base directory -----
cd $BACKUP_BASE_DIR
 
#----- monthly date directory create -----
MONTH_DATE_VAL="$(date "+%Y%m")"
if [ ! -d $MONTH_DATE_VAL ]; then
    mkdir $MONTH_DATE_VAL
fi
cd $MONTH_DATE_VAL
 
#----- get serial date value -----
TODAY_DATE_VAL="$(date "+%Y%m%d")"
SERIAL_DATE_VAL="$(date "+%s")"
 
#----- apache log moved & http restart -----
mv $APACHE_LOG_DIR/*log .
 
/usr/bin/systemctl restart httpd.service
/usr/bin/sleep 10
 
if [ ! -f $APACHE_LOG_DIR/access_log ]; then
  /usr/bin/systemctl restart httpd.service
  /usr/bin/sleep 10
fi
 
#----- compress log files -----
FILENAME=apache_log_${TODAY_DATE_VAL}.tar.gz
if [ -f $FILENAME ]; then
    TEMP_FILENAME=${FILENAME}.${SERIAL_DATE_VAL}
    mv $FILENAME $TEMP_FILENAME
fi
tar cvfz $FILENAME *_log
rm -f *log
 
/usr/bin/sleep 5
 
cd /var
FILENAME=$BACKUP_BASE_DIR/$MONTH_DATE_VAL/var_log_${TODAY_DATE_VAL}.tar.gz
if [ -f $FILENAME ]; then
    TEMP_FILENAME=${FILENAME}.${SERIAL_DATE_VAL}
    mv $FILENAME $TEMP_FILENAME
fi
tar cvfz $FILENAME log
※上記スクリプトを1週間に1回定期実行します。

6. gzip圧縮の設定

アクセス速度アップのために、通信速度を短縮する「gzip圧縮」を導入します。
「/etc/httpd/conf.d」フォルダに「deflate.conf」というファイルを作成します。
※ファイル名は任意です。
$ sudo vi /etc/httpd/conf.d/deflate.conf

以下の内容を記入します。
<IfModule mod_deflate.c>
    DeflateCompressionLevel 1
    <IfModule mod_filter.c>
        FilterDeclare COMPRESS
        FilterProvider COMPRESS DEFLATE "%{CONTENT_TYPE} =~ m#^text/#i"
        FilterProvider COMPRESS DEFLATE "%{CONTENT_TYPE} =~ m#^application/(atom\+xml|javascript|json|rss\+xml|xml|xhtml\+xml)#i"
        FilterProvider COMPRESS DEFLATE "%{CONTENT_TYPE} =~ m#^image/(svg\+xml|vnd\.microsoft\.icon)#i"
        FilterChain COMPRESS
        FilterProtocol COMPRESS DEFLATE change=yes;byteranges=no
        #BrowserMatch ^Mozilla/4 gzip-only-text/html
        #BrowserMatch ^Mozilla/4\.0[678] no-gzip
        #BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
        #Header append Vary Accept-Encoding env=!dont-vary
    </IfModule>
</IfModule>

Apacheを再起動します。
$ sudo systemctl restart httpd.service



最終更新:2024年05月28日 07:22