この講座は、前回インストールしたApache2.4(ソース版)を起動させます。
以前のLinuxではSysVinitだったりUpstartという起動プログラムが使われていましたが、最近のLinuxはsystemdを採用するディストリビューションも増えてきました。
そのためApacheをsystemdに対応させる必要があります。
今回はsystemd配下のApache2.4を起動させるための環境を整えていきます。
最初にApacheをインストールしたディレクトリと設定ファイルを設置したディレクトリにcdして、オーナーとパーミッション確認してください。
目次
動画講座 Apache2.4ソース版の起動
Apacheのインストールディレクトリにcd
Apacheをインストールしたディレクトリcdしてパーミッションを確認します。
cd /usr/local/apache/bin
オーナーとグループがlinux8weeksになっているファイルがあれば、それらをrootに変更します。
sudo chown root:root *
コマンド実行後は、変更されているかllコマンドで確認。
Apacheの設定ファイルの場所にcd
次はApacheの設定ファイル、httpd.confが設置されているディレクトリにcdします。
locate httpd.conf でどのディレクトリに設置されているのか分かりますよね。
もし何も結果が表示されない場合は以下のように
sudo updatedb
データベースをアップデートして再度 locate httpd.conf と入力すれば場所が分かるはずです。
はい、場所が分かったところでcdしてみましょう。
cd /etc/httpd/conf
findでパーミッションを一括変更
httpd.confなど重要なファイルは、管理者だけが編集したり閲覧できればいいのでファイルのパーミッションを644から600に変更します。
sudo find . -type f -exec chmod 600 {} \;
このコマンドでディレクトリ内の全ファイルを600に変更することができます。
ディレクトリのパーミッションを755から700に変えたい場合は以下のコマンドです。
ただし、パーミッションを厳しくしすぎるとオペレーションがし辛くなりますので、ほどほどにしておきましょう。
sudo find . -type d -exec chmod 700 {} \;
Apacheソース版のsystemd対応
Apacheのsystemd対応と、起動させるための設定です。
systemd-develのインストール
まずはsystemd-develをパッケージでインストールします。
sudo yum install systemd-devel
Apacheソースディレクトリにcd
Apacheソースディレクトリ /usr/local/src/apache/httpd-2.4.xx/modules/arch/unix(※httpd-2.4.xxはバージョンによって異なります)にcdします。
cd /usr/local/src/apache/httpd-2.4.xx/modules/arch/unix
mod_systemd.cのダウンロード
wgetでmod_systemd.cをダウンロードした後に、libtoolコマンドライブラリをビルド。
wget https://www.superusers.jp/mod_systemd.c
mod_systemdのコンパイル
/usr/local/apache/bin/apxs -c mod_systemd.c -I /usr/include/systemd/sd-daemon.h
mod_systemdのコンパイル
以下の3行のコマンドを入力してApacheがsystemdに対応するようにライブラリをビルドします。
libtool --silent --mode=compile gcc -std=gnu99 -prefer-pic -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -D_LARGEFILE64_SOURCE -DLINUX -D_REENTRANT -D_GNU_SOURCE -pthread -I/usr/local/apache/include -I/usr/local/apache/include -I/usr/local/apache/include -I/usr/local/apache/apr/include/apr-1 -I/usr/local/apache/apr-util/include/apr-1 -c -o mod_systemd.lo mod_systemd.c && touch mod_systemd.slo
libtool --silent --mode=link gcc -std=gnu99 -Wl,-z,relro,-z,now,-L/usr/lib64 -o mod_systemd.la -rpath /usr/local/apache/modules -module -avoid-version mod_systemd.lo
libtool --silent --mode=link gcc -std=gnu99 -Wl,-z,relro,-z,now,-L/usr/lib64 -o mod_systemd.la -rpath /usr/local/apache/modules -module -avoid-version mod_systemd.lo -lsystemd-daemon
CeontOS 8は3行目の最後の「-lsystemd-daemon」を「-lsystemd」に変更してから実施します。
libtool --silent --mode=link gcc -std=gnu99 -Wl,-z,relro,-z,now,-L/usr/lib64 -o mod_systemd.la -rpath /usr/local/apache/modules -module -avoid-version mod_systemd.lo -lsystemd
mod_systemdライブラリーのインストール
sudo /usr/local/apache/bin/apxs -i -a -n systemd mod_systemd.la
mod_systemd.so が/usr/local/apache/modulesにインストールされます。
この時にhttpd.confのコピーがhttpd.conf.bakとして取られ、httpd.confに以下の記述が追記されます。
LoadModule systemd_module modules/mod_systemd.so
Apacheの起動ユニットファイルの設置
動画では起動スクリプトと言っておりましたが、正しくはユニットファイルでした。
Apache起動ユニットファイルを作成します。
sudo vi /usr/lib/systemd/system/httpd.service
以下の内容をコピーしてペーストします。
[Unit]
Description=The Apache HTTP Server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=notify
#EnvironmentFile=/etc/sysconfig/httpd
ExecStart=/usr/local/apache/bin/httpd $OPTIONS -DFOREGROUND
ExecReload=/usr/local/apache/bin/httpd $OPTIONS -k graceful
ExecStop=/bin/kill -WINCH ${MAINPID}
# We want systemd to give httpd some time to finish gracefully, but still want
# it to kill httpd after TimeoutStopSec if something went wrong during the
# graceful stop. Normally, Systemd sends SIGTERM signal right after the
# ExecStop, which would kill httpd. We are sending useless SIGCONT here to give
# httpd time to finish.
KillSignal=SIGCONT
PrivateTmp=true
[Install]
WantedBy=multi-user.target
systemd設定ファイルの読み込み
httpd.serviceの保存後、systemdに設定を反映させるためにsystemctlでリロードします。
sudo systemctl daemon-reload
systemdに認識されたことを確認
httpd.serviceがsystemdに認識されていることを確認。
sudo systemctl status httpd
systemdにApacheのユニットファイルが認識されたのであれば、Loaded: loaded と表示されます。
Apacheの自動起動設定
サーバーを再起動した際に、Apacheが自動起動するように設定。
sudo systemctl enable httpd
enabledと表示されれば自動起動される設定になっています。
Apache設定ファイルの構文チェック
ここまでApacheを起動させるための準備をしてきました。
Apacheが起動するまであともう少しです。頑張れ!!
Apacheの設定ファイルに構文エラーがないかチェックします。
sudo /usr/local/apache/bin/httpd -t
実行すると以下のような結果が表示されるはずです。
AH00558: httpd: Could not reliably determine the server’s fully qualified domain name, using fe80::1:85ff:fe82:5a92%eth0. Set the ‘ServerName’ directive globally to suppress this message
Syntax OK
Syntax OKと表示されてるので起動はします。
ただ、FQDN(Fully Qualified Domain Name)が判別できないとメッセージが表示されてるので対応します。
suでrootに変身
管理者権限が必要な作業を連続してする場合は、rootになった方が作業効率が上がります。臨機応変に使い分けましょう。
sudo -s
プロンプトが$から#に変わって、rootになったことが分かります。
用心深いあなたはきっと whoami とタイプするはずです。
whoami
ServerNameの設定
先ほど構文チェックした時に出力されたメッセージの中にServerNameと記述されていました。
これはhttpd.conf内のServerNameを設定することで対応することができます。
vi /etc/httpd/conf/httpd.conf
コマンドモードの状態でServerNameを検索します。
/ServerName
ServerNameと書かれた文字列を検索すると、その文字列の先頭文字に移動します。
最初にヒットした箇所を修正するのではないので、スラッシュのみを入力してenterキーを押すと同じキーワードを検索してくれます。
/
修正が必要な箇所は以下の部分です。
#ServerName www.example.com:80
行頭の#はコメントを意味していて、Apacheの動作には影響を与えません。
構文チェックでFQDNが設定されていないと表示されたのは、この部分が設定されていないからです。
行頭の#を削除して以下のように書き換えてください。
ServerName su-camp.superusers.jp:80
escキーを押してviのモードをコマンドモードにしてください。
Includeで外部設定ファイルを有効化
次にhttpd-default.confを検索。
/httpd-default.conf
行頭の#を削除してhttpd-default.confを読み込むように設定します。
Include /etc/httpd/conf/extra/httpd-default.conf
ここまで終了したらhttpd.confを保存してviを終了します。
httpd-default.confの編集
httpd-default.confを編集して、Apacheの詳細バージョンを表示させないようにします。
vi /etc/httpd/conf/extra/httpd-default.conf
ServerTokensをProdに変更
このファイルの中のServerTokensという文字列を検索して、ServerTokens Full を以下のように変更します。
ServerTokens Prod
Prodは「ProdactOnly」の略でApacheであることだけ表示されます。
デフォルトのFullのままにしていると、Apacheや使用しているOS等も表示されることがあるので必ず修正しましょう。
httpd-default.confを保存してviを終了し、設定ファイルの構文チェックをします。
/usr/local/apache/bin/httpd -t
Syntax OK と表示されましたか?
Apacheを起動
Syntax OKと表示されたらApacheを起動します。
systemctl start httpd.service
問題なく起動したか確認をするためにpsコマンドを使います。
ps aux | grep httpd
Apacheが起動していれば、以下のようにプロセスが表示されます。
root 2652 0.0 0.7 104036 3592 ? Ss 17:08 0:00 /usr/local/apache/bin/httpd -DFOREGROUND
daemon 2653 0.0 0.4 392948 2412 ? Sl 17:08 0:00 /usr/local/apache/bin/httpd -DFOREGROUND
daemon 2654 0.0 0.4 392948 2412 ? Sl 17:08 0:00 /usr/local/apache/bin/httpd -DFOREGROUND
daemon 2655 0.0 0.5 458484 2912 ? Sl 17:08 0:00 /usr/local/apache/bin/httpd -DFOREGROUND
サーバーのIPアドレスを調べる
サーバーのIPアドレスを調べて、ブラウザでアクセスできることを確認してみましょう。
ifconfig | grep inet
下の1行目の「xxx.xxx.xxx.xxx」の部分がIPアドレスです。
inet xxx.xxx.xxx.xxx netmask 255.255.254.0 broadcast xxx.xxx.xxx.255
inet6 fe80::1:85ff:fe82:5a92 prefixlen 64 scopeid 0x20<link>
inet6 2400:8500:1301:740:xxx:xxx:xxx:xxx prefixlen 128 scopeid 0x0<global>
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
コピーしてブラウザのアドレスバーにペーストするとページが表示されると思います。
ブラウザで確認
Apacheのバージョン非表示を確認
/etc/httpd/conf/extra/httpd-default.conf の ServerTokens を Prod に変更しました。
その結果、Apacheのバージョンが非表示になっているのかを確認します。
curl -v -X GET http://あなたのサーバーのIPアドレス/
* About to connect() to 133.130.90.146 port 80 (#0)
* Trying 133.130.90.146...
* Connected to 133.130.90.146 (133.130.90.146) port 80 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.29.0
> Host: 133.130.90.146
> Accept: */*
>
< HTTP/1.1 200 OK
< Date: Thu, 03 Oct 2019 02:29:44 GMT
< Server: Apache
< Last-Modified: Mon, 11 Jun 2007 18:53:14 GMT
< ETag: "2d-432a5e4a73a80"
< Accept-Ranges: bytes
< Content-Length: 45
< Content-Type: text/html
<
<html><body><h1>It works!</h1></body></html>
* Connection #0 to host 133.130.90.146 left intact
11行目のように Server: Apache とだけ表示されていることを確認。
次の講座は、Webサーバー用の専用アカウントを作成してApacheの基本設定をします。
コメント