Webサーバ(Apache HTTP Server)をソースコードからインストールする

動作確認システム CentOS 7

Webサーバとして、Apache HTTP Serverをソースコードからインストールする。今回インストールするバージョンは、2.4.25である。 Apacheをインストールする前にAPR、APR-Utilをインストールする必要がある。

事前準備

yumで基本コマンドと開発ツール、必要なパッケージをインストールしておく。

yum groupinstall base development
yum install expat-devel

APRのインストール

/usr/local/srcに移動してからソースコードをダウンロード、展開する。

cd /usr/local/src/
wget http://ftp.riken.jp/net/apache/apr/apr-1.6.3.tar.gz
tar zxvf apr-1.6.3.tar.gz

展開したディレクトリの中に入り、configでmakefileを作成し、コンパイル、テスト、インストールする。

cd apr-1.6.3/
./configure
make
make test
make install

APR-Utilのインストール

/usr/local/srcに移動してからソースコードをダウンロード、展開する。

cd /usr/local/src/
wget http://ftp.riken.jp/net/apache/apr/apr-util-1.6.1.tar.gz
tar zxvf apr-util-1.6.1.tar.gz

展開したディレクトリの中に入り、configでmakefileを作成し、コンパイル、テスト、インストールする。

cd apr-util-1.6.1/
./configure --with-openssl=/usr/local/ssl --with-crypto --with-apr=/usr/local/apr
make
make test
make install

Apacheのインストール

/usr/local/srcに移動してからソースコードをダウンロード、展開する。

cd /usr/local/src/
wget http://ftp.tsukuba.wide.ad.jp/software/apache/httpd/httpd-2.4.33.tar.gz
tar zxvf httpd-2.4.33.tar.gz

展開したディレクトリの中に入り、configでmakefileを作成し、コンパイル、インストールする。

cd httpd-2.4.33/
./configure --enable-http2 --enable-ssl --enable-so --with-ssl=/usr/local/ssl --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr/bin/apu-1-config --enable-mods-shared=all --enable-mpms-shared=all
make
make install

シンボリックリンク作成

コマンドだけで実行できるよう、/usr/sbinの中にapxsとhttpdのシンボリックリンクを作成する。

ln -s /usr/local/apache2/bin/apxs /usr/sbin
ln -s /usr/local/apache2/bin/httpd /usr/sbin

Apacheサービス作成

Apacheをサービスとして起動、再起動、停止できるようにするために、サービスを作成する。

vi /etc/systemd/system/httpd.service
[Unit]
Description=The Apache HTTP Server
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
ExecStart=/usr/local/apache2/bin/apachectl start
ExecReload=/usr/local/apache2/bin/apachectl graceful
ExecStop=/usr/local/apache2/bin/apachectl stop

[Install]
WantedBy=multi-user.target

作成したサービスファイルを systemd に反映させる。

systemctl daemon-reload

systemdに反映されているか確認する

systemctl list-unit-files | grep httpd
httpd.service                                 disabled

ファイアウォールの設定

ファイアウォールの初期値では、TCP:80(HTTP)、TCP:443(HTTPS)のポートが閉じられているので、ポートを開けるように設定し、反映させる。

firewall-cmd --add-port=80/tcp --permanent
firewall-cmd --add-port=443/tcp --permanent
firewall-cmd --reload

設定

/etc/httpd/conf/httpd.confを管理者権限で開く。

vi /etc/httpd/conf/httpd.conf

以下のように編集する。

ServerAdmin [E-mailアドレス]

ServerName [ドメイン名]:[ポート] 
#通常はポート=80

#アクセスされた時に表示するコンテンツを置いてあるディレクトリを指定する
DocumentRoot "/var/www/html"

# DocumentRootのコンテンツへアクセスされた時の設定
<Directory "/var/www/html">
    # セキュリティ上、SSIを許可するが、SSIから外部 cgi を呼び出すのを禁止する。
    # ディレクトリの中のファイル一覧が表示される機能を無効にするため、Indexesを入れない。
    Options MultiViews SymLinksIfOwnerMatch IncludesNoExec

    # .htaccess で設定可能なものは全て有効にする
    AllowOverride All

    # アクセスを許可する
    Require all granted
</Directory>

<IfModule dir_module>
    # ファイル名が指定されず、ディレクトリ名のみで指定された時、どのファイル名のものを返すかを指定する。
    DirectoryIndex index.html index.htm
</IfModule>

# コメントを外す
Include conf/extra/httpd-default.conf

/etc/httpd/conf/extra/httpd-default.confを開く。

vi /etc/httpd/conf/extra/httpd-default.conf

セキュリティの関係で、以下のように設定する。


ServerTokens ProductOnly

ServerSignature Off

Header unset "X-Powered-By"
RequestHeader unset Proxy
Header append X-Frame-Options SAMEORIGIN
Header set X-XSS-Protection "1; mode=block"
Header set X-Content-Type-Options nosniff
TraceEnable Off

設定ファイルの編集が終わったら、文法的に問題ないかを確認する。

/usr/local/apache2/bin/apachectl -t

文法的に問題がなければ、「Syntax OK」と表示される。

起動、自動起動設定

サービスを起動し、自動起動させるように設定する。

systemctl start httpd
systemctl enable httpd

http://[IPアドレス]/ にアクセスしてみて、「It works!」という表示が出ればOK。