03-02 Apacheソース版の起動

この講座は、前回インストールした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>

コピーしてブラウザのアドレスバーにペーストするとページが表示されると思います。

ブラウザで確認

IPアドレスをブラウザのアドレスバーにペースとして「It works!」と表示されればOK

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の基本設定をします。

関連記事

コメント

この記事へのコメントはありません。

おすすめ記事

  1. 【多段SSH】公開鍵認証で中継サーバー経由のログインが簡単!

  2. インターネットに繋いだサーバーで最初にやらなければならない設定

  3. Swapアウトしているプロセスを特定する方法

  4. Linuxを極めるならコマンドよりも〇〇が先だ!!

  5. お名前ドットコムのDNS設定方法