16 Raspberry PiでWEBサーバー(LAMPスタック)構築 その1/4 (Apache導入)

今回から4回にわたってWEBサーバーを構築していきます。

WEBページを作成したことがある人はわかると思いますが、レンタルサーバーと同じような環境をRaspberry Piで実現させてWEBページを公開できるようにします。

こんな手のひらサイズのコンピューターで世界に情報発信できるなんてすごい
(*´Д`*)ハァハァ・・

あと、独自ドメインと固定グローバルIPを持っている前提で書いていきます。
独自ドメインはどこでも好きなところでとって構わないですが、私はレンサバと一緒にさくらインターネットを使っているので、設定はさくらの前提で書いていきます。他のサービスでは適宜読み換えてください。設定項目自体そんなに変わらないはず。

固定グローバルIPアドレスはプロバイダーのオプションで付けることができます。
私の場合はauひかりを使ってますが、どうもルーターのMACアドレス(機器固有の識別番号)でグローバルIPを割り当てているようなので固定IPとして使っています。(変わる可能性はあるのでほんとうはチェックしたほうがいい)

マンションなどで一括してプロバイダー契約していると、そもそもルーターの設定も自分でいじれないと思うので、そのままだと公開は無理です。新たに自分で回線を引くか自宅サーバーはあきらめてVPSあたりを検討すると幸せになれるかもしれません。

ルータのポート設定ができない場合はどうしようもありませんが、固定グローバルIPが取得できない/したくない場合はDDNS(ダイナミックDNS)で対応は可能です。MyDNS.jpで無料のDDNSを提供しているので調べてみてください。

参考URL
debian etchで自宅サーバ
CentOSで自宅サーバー構築
sa-sa-ki.jp
r271-635

ちなみにタイトルにあるLAMPスタックというのは、

データベース連動型のWebアプリケーションを開発するのに人気の高いオープンソースソフトの組み合わせ。OSにLinux、WebサーバにApache、データベースにMySQL、プログラミングにPHPかPerlかPythonを用いたシステムのこと。

とのことです。(引用元:http://e-words.jp/w/LAMP.html)

LAMPのうちLは今いじってるRaspbianですね。残りのAMP(Apache、MySQL、PHP)をインストールして使えるようにします。

今回はApacheをインストールして設定します。
流れは↓こんな感じ
1.Apacheのインストール
2.設定
3.動作チェック

スポンサーリンク

【1.Apacheインストール】

さくっとインストールします。
sudo apt-get install apache2

インストール時点で自動で起動されているので、LAN内からアクセスしてみます。
ブラウザのアドレス欄にRaspberry PiのローカルIPアドレスを入力。(以下xの部分)
http://xxx.xxx.xxx.xxx/

ブラウザに以下のページが表示されるはず。
アパッチインスコ成功

【2.設定】

設定ファイルを編集して設定していきますが、Raspbianの元になってるDebianは他のディストリビューション(CentOSとか)とファイル配置が異なってるので要注意。
Debian系は設定項目ごとに細かく設定ファイルが分割された配置になってるみたいです。

また、バーチャルホストの設定周りが独特なので設定を始める前にこのあたりのことを理解しておくと設定で何をしているのかわかると思います。前説に私なりの理解を書いておきます。
参考URL:yummy-yummy

前説 Debian系のバーチャルホスト設定

まずバーチャルホストとは?
1台のサーバー内で複数のWEBサイトを扱う運用方法。
そのうち、1つのIPで複数のWEBサイトを扱う方法が「名前ベース」と呼ばれる。
(一方で複数IPで扱う方法は「IPベース」と呼ばれる。今回は扱わない)

で、Apacheはバーチャルホストに対応してる。
名前ベースの場合はブラウザがアクセスしたURL内のホスト名から表示するページをApacheが割り振っている。
WEBサイトを1つしか持たない場合でも最低1つはバーチャルホストの設定を作る必要ある。
一方同じサイトでアクセスURLを変える場合(例えば “yourdomain.com” と “www.yourdomain.com” の2つのURLで同じページを表示したい場合)なんかは2つのバーチャルホスト設定を行う必要がある。

さらに、Debian系の場合は各バーチャルホスト毎に設定ファイルを別ファイルで管理して、各バーチャルホストの設定ファイルへリンクを張ることでそのホストを表示する/しないを制御している。

バーチャルホストごとの設定ファイルは/etc/apache2/sites-available/におかれ、
設定ファイルへのリンクを/etc/apache2/sites-enabled/に置くことで設定が有効化される。
(デフォルトでは/etc/apache2/sites-available/defaultに/etc/apache2/sites-enabled/000-defaultからリンクが張られてる。)

バーチャルホストの有効化・無効化はリンクを直接作成・削除してもよいが専用のコマンドが用意されており、
a2ensite :サイト設定を有効化
a2dissite:サイト設定を無効化
で対話的に設定できる。

また、モジュール関係もバーチャルホストと同様の管理をしてる。
設定ファイルディレクトリ:/etc/apache2/mod-available
リンクファイルディレクトリ:/etc/apache2/mod-enabled
モジュール設定有効化コマンド:a2enmod
モジュール設定無効化コマンド:a2dismod

設定する項目とファイル

この後設定する項目とどのファイルをいじるか挙げておきます。

/etc/apache2/apache2.conf
タイムアウト時間
実行ユーザーとグループ (確認のみ)

/etc/apache2/conf.d/harset
言語設定(確認のみ)

/etc/apache2/ports.conf
ポート設定(確認のみ)

/etc/apache2/conf.d/security
ApacheのバージョンやOS情報を隠匿
エラーページにApacheバージョン情報を表示しない

/etc/apache2/conf.d/name (新規追加)
サーバー名

/etc/apache2/mods-available/mime.conf
CGIスクリプトの有効化と拡張子に.pl追加

/etc/apache2/mods-available/dir.conf
デフォルトで検索されるindexファイル名 (確認のみ)

/etc/apache2/sites-available内に新規作成
管理者メールアドレス
ドキュメントルート
ディレクトリごとのアクセス設定
ドキュメントルートのファイル一覧非表示化
.htaccessの許可
iconsディレクトリのファイル一覧を非表示
CGI, SSIの許可

さっそく設定を始めます。

メイン設定ファイル

/etc/apache2/apache2.conf

sudo cp /etc/apache2/apache2.conf /etc/apache2/apache2.conf.org
sudo vi /etc/apache2/apache2.conf

————— 以下設定項目 —————–
101行目付近
タイムアウトの時間。初期300秒=5分って現代っ子はこんなに待てない。
待っても2分ぐらいかなってことで120に変更
#Timeout 300
Timeout 120

179行目付近
実行ユーザーとグループ。確認のみで変更なし。
メイン設定ファイルでは変数で指定されてる。
変数の中身は/etc/apache2/envvarsの16行目、17行目付近に記載されてて、ユーザもグループもwww-dataとなってる。
※サービスごとに実行ユーザーを分けるのはセキュリティ上Goodなのでこのままにしておきます。
# These need to be set in /etc/apache2/envvars
User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}
————– 設定ここまで ——————

言語設定ファイル

/etc/apache2/conf.d/charset
確認のみです。
vi /etc/apache2/conf.d/charset

AddDefaultCharsetがコメントアウトされてることを確認。そのままコメントアウトしておきます。
どうもこの設定をするとWEBページ内で指定された文字コードを上書きしてしまうです。設定すると文字化けの原因になりそうなので設定しません。

ポート設定ファイル

/etc/apache2/ports.conf
確認のみです。
vi /etc/apache2/ports.conf

9行目付近 80番になってることを確認
Listen 80
もし8080も使う場合は以下を追加
Listen 8080

mimeタイプ設定ファイル

/etc/apache2/mods-available/mime.conf
cgiやssi関係の設定を追加します。
sudo cp /etc/apache2/mods-available/mime.conf /etc/apache2/mods-available/mime.conf.org
sudo vi /etc/apache2/mods-available/mime.conf
————— 以下設定項目 —————–
217行目付近 CGIスクリプト有効化、.pl追加
# To use CGI scripts outside of ScriptAliased directories:
# (You will also need to add “ExecCGI” to the “Options” directive.)
#
#AddHandler cgi-script .cgi
AddHandler cgi-script .cgi .pl ←この行を追加

————- 設定ここまで ——————

ディレクトリ設定ファイル

/etc/apache2/mods-available/dir.conf
確認のみです。
vi /etc/apache2/mods-available/dir.conf

<IfModule mod_dir.c>
DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm
</IfModule>

インデックスとして認識させるファイル名に過不足があれば修正する。

セキュリティ設定ファイル

/etc/apache2/conf.d/security
sudo cp /etc/apache2/conf.d/security /etc/apache2/conf.d/security.old
sudo vi /etc/apache2/conf.d/security

※conf.d/以下のファイルはバックアップを残すとコピーも読み込んでしまうので直接編集。不安なら作業ユーザーのホームディレクトリなどにコピーしておく。

————— 以下設定項目 —————–
27行目付近 ApacheのバージョンやOS情報を隠匿する。
#ServerTokens OS ←コメントアウト
ServerTokens Prod ←追加

39行目付近 エラーページにApacheバージョン情報を表示させない。
ServerSignature Off ←コメント外す
#ServerSignature On ←コメントアウト
————- 設定ここまで ——————

ホストネーム設定ファイル

/etc/apache2/conf.d/name
新規ファイルを作成
sudo vi /etc/apache2/conf.d/name

ファイルが開いたら以下1行を追加して保存終了。
ServerName localhost

これでアパッチ立ち上げ時の以下ワーニングが出なくなる。
Could not reliably determine the server’s fully qualified domain name, using 127.0.1.1 for ServerName

バーチャルホストの設定

/etc/apache2/sites-available内に新規作成

設定ファイル作成(デフォルト設定をコピー)
設定ファイル名は好きにつけてください。ここではyourdomain.comにします。
cd /etc/apache2/sites-available/
sudo cp default yourdomain.com

設定ファイルの編集
sudo vi yourdomain.com

————— 以下設定項目 —————–
<VirtualHost *:80>
ServerName yourdomain.com ←サーバのドメイン追加
ServerAlias www.yourdomain.com ←サーバのエリアス(サブドメインなど)追加
ServerAdmin webmaster@localhost ←管理者メールアドレスの変更(デフォは表示されないのでそのままでもOK)

DocumentRoot /var/www/yourdomain ←ドキュメントルートを/var/wwwから/var/www/yourdomainに変更
<Directory />
Options None ←FollowSymLinksをNoneに変更
AllowOverride None
Order deny,allow ←追加(全アクセス拒否)
Deny from all ←追加(全アクセスを拒否)
</Directory>
<Directory /var/www/yourdomain/> ←ドキュメントルートに合わせて変更
Options ExecCGI FollowSymLinks MultiViews ←IndexesをExecCGIに変更。CGIの実行を許可し、ファイル一覧は非表示にする。
AllowOverride All ←NoneをAllに変更。.htaccessのオーバーライドを許可
Order allow,deny
allow from all
</Directory>

ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory “/usr/lib/cgi-bin”>
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>

ErrorLog ${APACHE_LOG_DIR}/error.log

# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn

CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
————- 設定ここまで ——————

Webalizerによるアクセス解析を行う準備としてログを分割保存する設定もここでやっておくと後々楽です。
設定は本ブログ23回目を参照ください。(2014年6月1日追加)

ホームディレクトリへ戻る
cd

作成した設定ファイルを有効化
sudo a2ensite
Your choices are: default default-ssl yourdomain.com
Which site(s) do you want to enable (wildcards ok)?
yourdomain.com ←作成した設定ファイル名を入力してエンター
Enabling site yourdomain.com.
To activate the new configuration, you need to run:
service apache2 reload

デフォルトのバーチャルホストを無効化
sudo a2dissite
Your choices are: default yourdomain.com
Which site(s) do you want to disable (wildcards ok)?
default ←defaultと入力してエンター
Site default disabled.
To activate the new configuration, you need to run:
service apache2 reload

リンクフォルダの状態を確認してみます。
ls -Al /etc/apache2/sites-enabled/

作成した設定ファイルへのリンクのみ表示されてればOKです。

ドキュメントルートの作成とパーミッション変更

設定でドキュメントルートを変更したのでフォルダを作成してパーミッションを設定します。
sudo mkdir /var/www/yourdomain

所有者とパーミッションの設定
sudo chown www-data:www-data /var/www/yourdomain
sudo chmod 775 /var/www/yourdomain/

作業ユーザーをwww-dataグループへ追加
sudo gpasswd -a username www-data

グループへの追加を更新するためいったんログアウトして再度ログインします。
exit

テスト用にインデックスファイルを作成
cd /var/www/yourdomain/
vi index.html

以下テキストを入力。元のアパッチのindexファイルと異なるhtmlファイルなら何でもいいです。
<html>
<body>
<h1>TEST PAGE</h1>
<p>test</p>
</body>
</html>

保存終了。

3.動作チェック

さて、設定を反映させて動作チェックします。

設定を反映させるためにアパッチを再起動
sudo service apache2 restart

ブラウザでアクセスしてみます。
http://xxx.xxx.xxx.xxx/ ←xの部分にRPiのプライベートIPアドレス

キャッシュが残ってると元の画面「It Works!」が表示されるので
一度ページをリロードして確認。
先ほど作ったHTMLファイルが表示されればひとまずOK

次に、エラーページを表示させてみます。
ブラウザで以下にアクセス。
http://xxx.xxx.xxx.xxx/arimasen.html

フッターバージョンなどの表示がなければOK(以下のような表示)
NOT FOUND

最後のTELNETでwindowsから繋いでみます。

TeraTermを立ち上げて、接続画面でいったんキャンセル。
設定→TCP/IPを開いて、自動的にウィンドウを閉じるのチェックを外す。ポートは80にしてOK。
TeraTermでTelnet

設定→設定の保存でTERATERM.INIとは別名で保存します。
仮にTERATERM_WEB.INIとします。

先ほど保存したTERATERM_WEB.INIをテキストエディタで開きます。
以下の記述を探して書き換えます。
【変更前】
TCPLocalEcho=off
TCPCRSend=
【変更後】
TCPLocalEcho=on
TCPCRSend=CRLF
TeraTerm設定

保存して終了。

TeraTermを立ち上げます。キャンセルして、設定→設定の読み込みでさっき保存したTERATERM_WEB.INIを読み込みます。
ファイル→新しい接続
TCPポートを80に変更、サービスはその他、プロトコルはIPv4、ホストはRPiのローカルIPにして接続します。
TeraTermでWEBリクエスト

接続されても何も表示されないですが、以下を打ち込んで2回エンターを押します。
HEAD / HTTP/1.0

そうするとWEBサーバーから応答があります。
WEBサーバーの応答

上の画像のように、この応答のServer:の部分がApacheになってて、バージョンやらOSやら表示されてなければ

きちんと設定されています。

さて、これでApacheの導入は終了です。
次回PHPをセットアップします。

2014年4月28日作成
2014年5月5日草稿公開
2014年6月1日追記

スポンサーリンク

未経験からプロのエンジニアスキルを身につけることができる短期集中プログラムのご紹介です。

500時間をかけてフロント/サーバーサイド/インフラのすべてを一通り学ぶことができます。
また、専属のトレーナーと専属のキャリアアドバイザーが学習と就職の両面をサポートしてくれます。

何でも相談できるカウンセリングが無料で受けられます。無理な勧誘は一切行いませんので、お気軽にお申し込みください。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする