CentOS7に最新のApache2.4をインストール
CentOS7のデフォルトでは2.4.6とバージョンが古いので、IUSリポジトリを使ってApache2.4.39をインストールした時のメモ
HTTP/2ではなくHTTP/1.1を利用する前提で記載します。
CentOS7の公式yumリポジトリで提供されているバージョン
# yum info httpd 利用可能なパッケージ 名前 : httpd アーキテクチャー : x86_64 バージョン : 2.4.6 リリース : 89.el7.centos 容量 : 2.7 M リポジトリー : updates/7/x86_64 要約 : Apache HTTP Server URL : http://httpd.apache.org/ ライセンス : ASL 2.0 説明 : The Apache HTTP Server is a powerful, efficient, and extensible : web server.
Apacheがすでにインストールされていたら削除
Apacheインストール確認
# yum list installed | grep httpd
Apacheの停止
# systemctl stop httpd.service
Apacheの削除
# yum remove httpd
IUSリポジトリの追加
最新のApache(httpd)をインストールするのにIUSリポジトリを使います。
# yum install https://centos7.iuscommunity.org/ius-release.rpm
IUSリポジトリの無効化
IUSリポジトリは、インストールすると有効化の状態になっています。必要な時だけIUSリポジトリを使いたいので無効化にします。
/etc/yum.repos.d/ius.repo
enabled=1 ↓ enabled=0
IUSリポジトリを無効化にしたので、使用する時は「--enablerepo=ius」といったように明示的に実行します。
mime.typesのインストール
最新のApacheをインストールするには、事前にmime.typesをインストールする必要があります。mime.typesはmailcapパッケージに含まれてます。
# yum install mailcap
最新のApache2.4をインストール
# yum --disablerepo=base,extras,updates --enablerepo=ius install httpd httpd-devel
インストールが完了したらバージョンを確認
# httpd -v Server version: Apache/2.4.39 (IUS)
Apacheを起動
# systemctl start httpd.service
Apacheの自動起動の設定
# systemctl enable httpd.service
iptablesの設定
(※本サイトの「CentOS7を安全に運用する為の初期設定(iptablesの設定)」を参照ください)
http(80/443)ポートを許可
/etc/sysconfig/iptables
変更前にバックアップ
# cp -p /etc/sysconfig/iptables /etc/sysconfig/iptables_`date "+%Y%m%d%H%M%S"`
# http -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
「http://サーバのIPアドレス」にアクセスして、「It works!」が表示されるか確認します。
Apacheの設定
/etc/httpd/conf/httpd.conf
変更前にバックアップ
# cp -p /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf_`date "+%Y%m%d%H%M%S"`
Header unset X-Powered-By Header append X-Frame-Options SAMEORIGIN Header set X-XSS-Protection "1; mode=block" Header set X-Content-Type-Options nosniff ### headerの受信が10秒以内、bodyの受信が30秒以内に完了しない場合、「408」エラーとする ### RequestReadTimeout header=10 body=30 Timeout 30 ### KeepAliveで接続を保持する件数を30、タイムアウトまでの時間は10秒に設定 ### KeepAlive On MaxKeepAliveRequests 30 KeepAliveTimeout 10 ### サーバのバージョン情報等を隠す ### ServerTokens ProductOnly ServerSignature Off ### 逆引きは無効化 ### HostnameLookups Off ### XST対策 ### TraceEnable Off ServerRoot "/etc/httpd" Listen 80 Include conf.modules.d/*.conf User apache Group apache #ServerAdmin root@localhost #ServerName www.example.com:80 AddDefaultCharset UTF-8 EnableSendfile on IncludeOptional conf.d/*.conf <Directory /> AllowOverride none Options None Require all denied </Directory> <IfModule dir_module> DirectoryIndex index.html </IfModule> <Files ".ht*"> Require all denied </Files> ErrorLog "logs/error_log" LogLevel warn <IfModule log_config_module> LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%h %l %u %t \"%r\" %>s %b" common <IfModule logio_module> LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio </IfModule> CustomLog "logs/access_log" combined #LogFormat "[%{%Y-%m-%d %H:%M:%S}t] %a:%p %u %D %m %H %>s %U%q \"%{Referer}i\" \"%{User-Agent}i\"" combined_space LogFormat "[%{%Y-%m-%d %H:%M:%S}t]\t%a:%p\t%u\t%D\t%m\t%H\t%>s\t%U%q\t\"%{Referer}i\"\t\"%{User-Agent}i\"" combined_tab SetEnvIf Request_URI "\.(gif|jpeg|jpg|png|css|js|ico|swf)$" nolog SetEnvIf User-Agent "internal dummy connection" nolog </IfModule> <IfModule mime_module> TypesConfig /etc/mime.types AddType application/x-compress .Z AddType application/x-gzip .gz .tgz AddType text/html .shtml AddOutputFilter INCLUDES .shtml </IfModule> <IfModule mime_magic_module> MIMEMagicFile conf/magic </IfModule> ### MIME 追加 ### AddType image/vnd.microsoft.icon .ico ### コンテンツ圧縮 ### <IfModule mod_deflate.c> DeflateCompressionLevel 1 BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch ^Mozilla/4\.0[678] no-gzip BrowserMatch \bMSIE !no-gzip !gzip-only-text/html BrowserMatch "\bMSIE [1-6]\." no-gzip SetEnvIfNoCase Request_URI "\.(?:gif|jpe?g|png|zip|gz|ico|swf|mp.|wav)$" no-gzip dont-vary Header append Vary User-Agent env=!dont-vary AddOutputFilterByType DEFLATE text/plain AddOutputFilterByType DEFLATE text/html AddOutputFilterByType DEFLATE text/javascript AddOutputFilterByType DEFLATE text/css AddOutputFilterByType DEFLATE text/json AddOutputFilterByType DEFLATE text/xml AddOutputFilterByType DEFLATE text/xhtml AddOutputFilterByType DEFLATE text/xhtml+xml AddOutputFilterByType DEFLATE text/atom+xml AddOutputFilterByType DEFLATE application/javascript AddOutputFilterByType DEFLATE application/x-javascript AddOutputFilterByType DEFLATE application/json AddOutputFilterByType DEFLATE application/xml AddOutputFilterByType DEFLATE application/rss+xml AddOutputFilterByType DEFLATE application/xhtml AddOutputFilterByType DEFLATE application/xhtml+xml AddOutputFilterByType DEFLATE application/atom+xml AddOutputFilterByType DEFLATE application/x-httpd-php </IfModule> ### キャッシュ有効期限 ### <ifModule mod_expires.c> FileETag None ExpiresActive On ExpiresByType text/css "access plus 1 days" ExpiresByType text/javascript "access plus 1 days" ExpiresByType application/javascript "access plus 1 days" ExpiresByType application/x-javascript "access plus 1 days" ExpiresByType image/gif "access plus 3 days" ExpiresByType image/jpeg "access plus 3 days" ExpiresByType image/png "access plus 3 days" ExpiresByType image/vnd.microsoft.icon "access plus 3 days" </ifModule>
/etc/httpd/conf.d配下の設定ファイル
以下の3ファイルは使用しないので削除。ファイル自体を削除するとアップデート時に再作成されるので、空ファイルにする。
/etc/httpd/conf.d/autoindex.conf
/etc/httpd/conf.d/userdir.conf
/etc/httpd/conf.d/welcome.conf
変更前にバックアップ
# cp -p /etc/httpd/conf.d/autoindex.conf /etc/httpd/conf.d/autoindex.conf_`date "+%Y%m%d%H%M%S"` # cp -p /etc/httpd/conf.d/userdir.conf /etc/httpd/conf.d/userdir.conf_`date "+%Y%m%d%H%M%S"` # cp -p /etc/httpd/conf.d/welcome.conf /etc/httpd/conf.d/welcome.conf_`date "+%Y%m%d%H%M%S"`
ファイルの中身を空にする
# cp /dev/null /etc/httpd/conf.d/autoindex.conf cp: `/etc/httpd/conf.d/autoindex.conf' を上書きしますか? [y][Enter] # cp /dev/null /etc/httpd/conf.d/userdir.conf cp: `/etc/httpd/conf.d/userdir.conf' を上書きしますか? [y][Enter] # cp /dev/null /etc/httpd/conf.d/welcome.conf cp: `/etc/httpd/conf.d/welcome.conf' を上書きしますか? [y][Enter]
/etc/httpd/conf.modules.d配下の設定ファイル
基本モジュール
/etc/httpd/conf.modules.d/00-base.conf
変更前にバックアップ
# cp -p /etc/httpd/conf.modules.d/00-base.conf /etc/httpd/conf.modules.d/00-base.conf_`date "+%Y%m%d%H%M%S"`
必要なモジュールのみ設定
LoadModule alias_module modules/mod_alias.so LoadModule auth_basic_module modules/mod_auth_basic.so LoadModule authn_core_module modules/mod_authn_core.so LoadModule authn_file_module modules/mod_authn_file.so LoadModule authz_core_module modules/mod_authz_core.so LoadModule authz_host_module modules/mod_authz_host.so LoadModule authz_user_module modules/mod_authz_user.so LoadModule autoindex_module modules/mod_autoindex.so LoadModule deflate_module modules/mod_deflate.so LoadModule dir_module modules/mod_dir.so LoadModule env_module modules/mod_env.so LoadModule expires_module modules/mod_expires.so LoadModule filter_module modules/mod_filter.so LoadModule headers_module modules/mod_headers.so LoadModule log_config_module modules/mod_log_config.so LoadModule logio_module modules/mod_logio.so LoadModule mime_module modules/mod_mime.so LoadModule remoteip_module modules/mod_remoteip.so LoadModule reqtimeout_module modules/mod_reqtimeout.so LoadModule rewrite_module modules/mod_rewrite.so LoadModule setenvif_module modules/mod_setenvif.so LoadModule slotmem_shm_module modules/mod_slotmem_shm.so LoadModule socache_shmcb_module modules/mod_socache_shmcb.so LoadModule substitute_module modules/mod_substitute.so LoadModule unixd_module modules/mod_unixd.so
MPMモジュール
/etc/httpd/conf.modules.d/00-mpm.conf
変更前にバックアップ
# cp -p /etc/httpd/conf.modules.d/00-mpm.conf /etc/httpd/conf.modules.d/00-mpm.conf_`date "+%Y%m%d%H%M%S"`
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so StartServers 5 MinSpareServers 5 MaxSpareServers 20 ServerLimit 256 MaxRequestWorkers 256 MaxConnectionsPerChild 1000
systemdモジュール
/etc/httpd/conf.modules.d/00-systemd.conf(そのまま使用)
以下の5ファイルは使用しないので削除。ファイル自体を削除するとアップデート時に再作成されるので、空ファイルにする
/etc/httpd/conf.modules.d/00-dav.conf
/etc/httpd/conf.modules.d/00-lua.conf
/etc/httpd/conf.modules.d/00-optional.conf
/etc/httpd/conf.modules.d/00-proxy.conf
/etc/httpd/conf.modules.d/01-cgi.conf
# cp -p /etc/httpd/conf.modules.d/00-dav.conf /etc/httpd/conf.modules.d/00-dav.conf_`date "+%Y%m%d%H%M%S"` # cp -p /etc/httpd/conf.modules.d/00-lua.conf /etc/httpd/conf.modules.d/00-lua.conf_`date "+%Y%m%d%H%M%S"` # cp -p /etc/httpd/conf.modules.d/00-optional.conf /etc/httpd/conf.modules.d/00-optional.conf_`date "+%Y%m%d%H%M%S"` # cp -p /etc/httpd/conf.modules.d/00-proxy.conf /etc/httpd/conf.modules.d/00-proxy.conf_`date "+%Y%m%d%H%M%S"` # cp -p /etc/httpd/conf.modules.d/01-cgi.conf /etc/httpd/conf.modules.d/01-cgi.conf_`date "+%Y%m%d%H%M%S"`
ファイルの中身を空にする
# cp /dev/null /etc/httpd/conf.modules.d/00-dav.conf cp: `/etc/httpd/conf.modules.d/00-dav.conf' を上書きしますか? [y][Enter] # cp /dev/null /etc/httpd/conf.modules.d/00-lua.conf cp: `/etc/httpd/conf.modules.d/00-lua.conf' を上書きしますか? [y][Enter] # cp /dev/null /etc/httpd/conf.modules.d/00-optional.conf cp: `/etc/httpd/conf.modules.d/00-optional.conf' を上書きしますか? [y][Enter] # cp /dev/null /etc/httpd/conf.modules.d/00-proxy.conf cp: `/etc/httpd/conf.modules.d/00-proxy.conf' を上書きしますか? [y][Enter] # cp /dev/null /etc/httpd/conf.modules.d/01-cgi.conf cp: `/etc/httpd/conf.modules.d/01-cgi.conf' を上書きしますか? [y][Enter]
VirtualHostの設定
ディレクトリを作成
# mkdir -p /var/www/ip/html/
/etc/httpd/conf.d/11-ip.conf を作成
<VirtualHost XXX.XXX.XXX.XXX:80> ServerName XXX.XXX.XXX.XXX DocumentRoot /var/www/ip/html <Directory /var/www/ip> AllowOverride none Options None Require all denied </Directory> <Directory /var/www/ip/html> Require method GET POST Options FollowSymLinks RewriteEngine On </Directory> CustomLog logs/ip_access_log combined_tab env=!nolog ErrorLog logs/ip_error_log </VirtualHost>
※「XXX.XXX.XXX.XXX」はサーバのIPアドレスを設定します。
シンタックスチェック
# service httpd configtest Syntax OK
※シンタックスエラーがないことを確認
設定ファイルの再読み込み
# systemctl reload httpd.service
DocumentRootにindex.htmlを作成
/var/www/ip/html/index.html を作成
<html> <body> Hello World! </body> </html>
「http://サーバのIPアドレス」にアクセスして、「Hello World!」が表示されればOKです。
Apacheの主なコマンド
状態確認 # systemctl status httpd.service 起動 # systemctl start httpd.service 停止 # systemctl stop httpd.service 再起動 # systemctl restart httpd.service 設定ファイルの再読み込み # systemctl reload httpd.service 自動起動設定状態の確認 # systemctl is-enabled httpd.service 自動起動設定 # systemctl enable httpd.service 自動起動解除 # systemctl disable httpd.service シンタックスチェック # service httpd configtest