落書き帖  古事記  いろは歌  日 記

apache2ローカル導入テスト

2016年03月29日
apache2をローカル環境で使おうと思い試行錯誤した結果を、私なりに纏めてみます。

ディストリはdebianなので、apacheをインストールすると…、/etc/apache2/ ディレクトリが作成され、その配下に設定ファイルとディレクトリがずらりと並んでました。
他のディストリなら、/etc/httpd/ ってディレクトリが作られるのかな?

/etc/apache2/ 配下にある、apache2.conf がメインの設定ファイル。
apache起動時には、同じディレクトリ内(/etc/apache2/)にある、他のファイルやディレクトリ配下のファイル(/etc/apache2/*-enabled/*.mods など)をメインの設定ファイル(apache2.conf)に読み込み、設定に反映させるみたい…。
要は、他のディストリなら、httpd.conf(debianのapache2.conf)の長々とした設定ファイルで管理する所を…、
debianでは項目ごとに切り分け、/etc/apache2/ 配下で別のファイルとして管理するって事かな…。
おかげで、メインの設定ファイルの流れが分りやすい…。

こんな事書いてるけど、実は他のディストリの事は全く知らない…。
ネットからの知識の受け売り…。

設定ファイルを切り分け、管理しやすくしてくれてるんだけど…、
実はオイラ、昔から整理整頓が苦手…。
切り分けてくれてる設定ファイルに直接書き込んでいこうものなら…、
右も左もわからずapacheの動作をテストするうちに、あれ書いたり、これ消したり…、
そのうち設定ファイルの元の姿はいつのまにか分からなくなり…、
自分がなにやってるのかさえ、最後には分からなくなりそうな気がしました…。

そこで、debianが用意してくれている設定ファイルにはなるべく手を付けず…、
まずは自分だけの設定ディレクトリを作成し…、
その中で作成したファイルだけで管理してみる事にしました。
もし何か設定ファイルの書き方を間違っても、自分専用に作ったディレクトリの中だけ見てれば良いしね


まず簡単にapache2の導入から…、

sudo apt-get update
sudo apt-get install apache2

インストールに問題なければ、インストール後すぐ起動する為にいっぱいモジュール読み込んで、それを画面に表示してくれるみたい。(debian)
失敗した時は赤色の文字が出てた…。

無事インストール出来たかテスト…、
コマンドラインからなら…、

curl http://localhost

ブラウザからテストするより、遥かに楽…(オイラ的に)
ただ…、/var/www/html/index.html(debianの場合)のHTMLファイルは、ブラウザで見た時の見た目を思いっきり意識してるから、コマンドラインから確認すると、ちょっと分かり難い…。
そこで、index.html の中味を書き換え…。

sudo sh -c "echo kainushi-no-heya > /var/www/html/index.html"

index.html の中味を簡単にしてたら、テスト中分りやすいかもしれない…。

このままテストを続けてもいいんだけど…、
インストール時の設定では、OS起動時にapache2を自動起動するようになってる。
多分それで問題無いんだろうけど…、
オイラには、apache2がどんな事するのかとか、サーバーがどんな物だとか、ポートの管理とか…、
さっぱり分から無いので、自動起動は気持ち悪いな、って思った…。
そこで、apache2の自動起動停止…。

sudo insserv -r apache2

insserv ってコマンド、覚えたばっかりなんだけど…、
初めて見た時、覚えにくそうな名前だな、と思った。

…なんだよ insserv って!

「insserv 意味」で検索しても、出てこないし…。
仕方ないので、MANページ開いたら英語がつらつらと…。
読める訳無いので、きっと何かの略語なんだろ?、とあたりを付けMANページの中を…、
「ins」で検索…、何となく「install」ぽい。
「serv」で検索…、何となく「service」ぽい。

…サービスをインストールするって事なのか。
…多分。

apache2の起動と停止は、apachectl コマンド。

apachectl start // スタート
apachectl stop // ストップ
apachectl configtest // 設定ファイルに文法間違いが無いかテスト

いよいよテストの準備が整ったので…、
/etc/apache2/ 配下に自分専用の設定ディレクトリ作成。

sudo mkdir /etc/apache2/myconf

myconf ディレクトリの中だけ弄るので、他の設定を汚さなくて済む。

このディレクトリ内で作った設定を、apache起動時に読み込んでもらう為に…、
/etc/apache2/apache2.conf ファイルの最後尾に少し書き足し…。
もとからある設定を弄るのは、この箇所だけ…。

sudo vi /etc/apache2/apache2.conf

apache2.conf ファイルを開いたら、最後尾まで移動し…、

## myconf ##
IncludeOptional myconf/*.conf
IncludeOptional myconf/*.load
##########

みたいな雰囲気で追加で書き込み。
IncludeOptional はファイルを読み込む命令っぽい。
その後に続くファイル名は、/etc/apache2/ ディレクトリからの相対パスで指定。
IncludeOptional myconf/*.conf なら…、
myconf ディレクトリの拡張子が .conf のファイルを何でも(*)読み込んでね!
って命令。
.conf って拡張子が嫌なら…、
.neko とか .mike とか .tama でも良いと思う…。
多分…。試してないけど…。

ここまで出来たら、後は試したい事を、/etc/apache2/myconf/ 配下に設定ファイルを作って、どんどん書き込んでいく。

sudo vi /etc/apache2/myconf/my.conf

ファイルの拡張子は、先ほど IncludeOptional で指定した拡張子で…。

と言っても何書いたらいいか分から無いので…、
とりあえず、/etc/apache2/sites-available/000-default.conf の内容をそのまま持ってくる…。
000-default.conf の中味は、バーチャルホストの設定ファイルっぽい。
半分は英語のコメントなので、そんなのは読めないから削除。
命令文だけ残してみると…、



<VirtualHost  *:80> から </VirtualHost> の部分でバーチャルホストの設定をするみたい…。

バーチャルホストがあるって事は、バーチャルで無いホストもあるんだろうけど…、
その違いはオイラには分から無い…。

VirtualHost *:80 の「*」は、「ホスト名で定義されてるどのIPアドレスでも受け付けるよ」って事かな?
(オイラ的認識
例えば、/etc/hosts を開くと…、

127.0.0.1 localhost
127.0.0.1 kainushi
127.0.1.1 poti
192.168.0.1 kainushi poti

みたいな事が書いてある。
詳しい事は分から無いけど、ネームサーバーに問い合わせるより前に、まずは/etc/hosts の内容を使ってホスト名の解決をしてるみたい…。
具体的に言うと…、もしあなたが…、

「yahoo なんて、flash を使う yahoo news からLinuxを締め出してるくせに、トップページでは思いっきり flash 使わせるんだぜ!
信じらんない!
もう yahoo なんて絶対に使うもんか!」

って思うなら…、/etc/hosts に…、

127.0.0.1 www.yahoo.co.jp

を追加で書き込んだ後、apacheを起動してやればいい…。
もし間違って、ブラウザのアドレス欄に、http://www.yahoo.co.jp と打ち込んでも、yahoo にはつながらず、あなたの用意したテキストを表示してくれる…。(ブラウザのキャッシュは消してね)

…オイラは、そ、そ、そんなことしてないよ。

そう言う訳で…?、
VirtualHost  *:80 の「*」は、PCのアドレスかホスト名(サーバー名)を書いても良い…。
そしてその後に続くのが、待受で使うポート番号…。
ただ、ホスト名書くのは、非推奨って書いてなかったかな…?
理由は分からないけど…。
違うかも知れないから気になるなら自分で調べて…。
おいらは、ローカル環境でしか使わないから、興味無い…。

<VirtualHost  *:80> から </VirtualHost> の間にある中味は…、
メールも使わず、sslとか言う難しそうな物もローカルでは使わないので…、
とりあえず、こんな感じにした…。↓



potiサーバーのIPアドレスを、127.0.1.1 にしたので…、
ちゃんと名前解決してくれるように…、
/etc/hosts にも potiのアドレスを追加で書き込む…、

sudo sh -c "echo 127.0.1.1 poti >> /etc/hosts"

また、potiサーバーのルートを、/home/poti/www にしたので…、
とりあえず、そのコンテンツを作る…。

echo poti-no-heya > /home/poti/www/index.html

そんで、これで設定終わりなのかな?、とか思い…、

curl http://poti

でも、エラーが出てつながらない…。
「あなたには、このサーバーのルートディレクトリにアクセスする権限はありませんよ。」
みたいな事をエラーは言ってくれてる。
何か設定が足りないようで…、
その原因はディレクトリのアクセス権限らしい事がエラーから分かる…。
そこで大元の設定ファイル、
/etc/apache2/apache2.conf を見に行く…、
directory で検索するとそれらしい事が書いてある…。



<Directory> から </Directory> の間で、ディレクトリ毎の挙動を決めるらしい…。
ルートディレクトリ(/)の「Require all denied」で、一度全てのリクエストを拒否して…、
後は、個別に、「Require all granted」で、許可している…、
って事なんかな?
良く分から無いけれど…、
Directory /var/www/ の内容を使えばいけそうな予感。
これを、my.conf に追加すると…、



↑こんな感じ…。
そしてこれで、apache2を立ち上げ、テストしてみると…。

…おぉぉ!poti-no-heya行けたじゃん。

しかし、今のままでは、ローカルネットワークから potiサーバーにアクセス出来てしまう…。
オイラは内向きな性格なので、ローカルネットワークからもサーバを隔離する事にした…。
調べてみると、Listen とか言う命令が、ポート管理しているらしい…。
そこで、/etc/apache2/ ディレクトリを見ると…、
ports.conf って言うモロそれらしい設定ファイルが見つかる…。
ports.conf を開くと、Listen 80 って言う命令があるので、
とりあえず、それをコメントアウト。
その後、my.conf に自分しかアクセス出来ないアドレス…、
そう先ほど、/etc/hosts で設定した potiサーバーのアドレス…、
127.0.1.1
で Listen 命令を書いていく…。



これでもう、完全な密室サーバーpoti の出来上がり。
多分…。

もし、モジュールを使いたくなったりしたら、myconf ディレクトリの中に、モジュールへのリンクを作ってやればいい…。
その為に、apache2.conf の最後に…、
IncludeOptional myconf/*.load
も書いてみた。

sudo ln -s /etc/apache2/mods-available/cgi.load /etc/apache2/myconf/cgi.load

みたいな感じ。