Raspberry Pi 3にApache2とPHPをインストールしたときの設定メモです。
ラズパイのOSはRaspbianでDebian系なので、DebianやUbuntuで検索すれば大抵の解決策はヒットします。
インストール
$ sudo apt-get install apache2
Apacheの起動・停止・再起動
# 起動
$ sudo service apache2 start
# 停止
$ sudo service apache2 stop
# 再起動
$ sudo service apache2 restart
設定ファイル変更して、変更を反映させるには必ず再起動が必要。
設定ファイルについて
/etc/apache2/
ディレクトリに設定ファイルが作成される。
最初に/etc/apache2/apache2.conf
の設定ファイルが読み込まれる。
次に/etc/apache2/conf.d
以下の設定ファイルが追加で読み込まれる。
仮想ホストの設定は/etc/apache2/sites-available
ディレクトリにあるファイル
モジュールの設定は/etc/apache2/mods-available
ディレクトリにあるファイル
仮想ホストやモジュールの設定は、実際に読み込まれるのは*-available
ではなく*-enabled
ディレクトリにあるシンボリックリンクであり、有効にしたい設定のシンボリックリンクを作るという感じで設定を有効にする。
設定ファイルの構造
一行ごとにディレクティブ
と呼ばれる設定内容を記述する。セクションコンテナ
内に書いた設定は、セクションコンテナ内だけ有効の設定となる。
<Directory "/var/www/html"> # セクションコンテナ
#Options FollowSymLinks
AllowOverride None
Require all denied
</Directory>
ポート番号の設定
Apacheが待ち受けるポート番号の設定は次のように設定する。
Listen 80 # Apacheが待ち受けるポート番号
<IfModule ssl_module>
Listen 443
</IfModule>
<IfModule mod_gnutls.c>
Listen 443
</IfModule>
<VirtualHost *:80>
# (略)
</VirtualHost>
管理者のメールアドレスの設定
<VirtualHost *:80>
ServerAdmin hoge@gmail.com
# (略)
</VirtualHost>
サーバ名の設定
/etc/apache2/conf.d
ディレクトリに新しくservername
というサーバ名専用の設定ファイルを新しく作成する。
ServerName www.hoge.jp:80 # エラー時に表示されるサーバ名とポート番号
UseCanonicalName On # Onにするとサーバ名としてServerNameの値を使う
作成した設定ファイルを読み込ませる設定を書く。
Include conf.d/servername
ドキュメントルートの設定
WEBサーバは独自にルートディレクトリを持っており、そこにHTMLファイルなどを置く。このWEBサーバのルートディレクトリをドキュメントルート
と呼ぶ。
<VirtualHost *:80>
# /var/www/htmlディレクトリをドキュメントルートとする設定
DocumentRoot /var/www/html
</VirtualHost>
エラーログの設定
Apache2系のエラーはデフォルトで/var/log/apache2/error.log
に出力される。
ファイル名等を変更したい場合は以下の設定を変更する。
ErrorLog ${APACHE_LOG_DIR}/error.log
${APACHE_LOG_DIR}の設定は/etc/apache2/envvars
に書いてある。
インデックスファイルの設定
WEBブラウザのURL欄にディレクトリを指定してページを開いたとき、あらかじめ設定されたファイルを開きたい。
たとえば、index.htmlを開くようにするには次のようなディレクティブを追記する。
DirectoryIndex index.html index.htm # 左のものが優先される
ファイル一覧を表示しないようにする
WEBブラウザのURL欄にディレクトリを指定してページを開くと、ファイルの一覧が開く。これを無効化したい。
たとえば、/var/www/html
がルートディレクトリのとき、ルートディレクトリ以下すべてのページでこれをしたい場合、次のディレクティブを追記する。
<Directory /var/www/html>
Options Indexes FollowSymLinks
</Directory>
エラーページの設定
404エラーが発生したとき、専用の特別なページを表示したい。次のようにディレクティブを追記する。
<Directory /var/www/html>
# 404エラーのとき、/error/404.htmlを表示する
ErrorDocument 404 /error/404.html
ErrorDocument 403 /error/403.html
<Directory>
ルートディレクトリ以外の場所のファイルを参照したい
すべてのファイルをルートディレクトリに設置したくない。このようなとき、エイリアスを設定することでディレクトリをルートディレクトリに存在するように見せることができる。
# /etc/jquery/ディレクトリを、/jquery/と書いてアクセスできる。
Alias /jquery/ "/etc/jquery/"
<Directory /etc/jquery/>
Require all granted
</Directory>
こうすることで、htmlファイルに次のように書くことができるようになる。
<script type="text/javascript" src="/jquery/jquery-3.1.1.min.js"></script>
ダイジェスト認証の設定
まず、htdigestコマンドでダイジェストファイルを作成する。
ファイル名:.htdigest
レルム名(AuthName):RealmName
ユーザ名:Aoba
パスワード:zoizoizoi
とすると、
$ sudo htdigest -c /var/www/html/.htdigest 'RealmName' Aoba
Adding password for Aoba in realm RealmName.
New password:zoizoizoi
Re-type new password:zoizoizoi
次に、ダイジェスト認証モジュールを有効にする。
$ sudo a2enmod auth_digest # 有効化する
$ sudo a2dismod auth_digest # 無効化する
ダイジェスト認証を有効にしたいディレクトリの設定を書く。
<Directory /var/www/html>
AuthType Digest
AuthName "RealmName" # レルム名
AuthUserFile /var/www/html/.htdigest
Require valid-user
</Directory>
文字コードの設定
どの文字コードでデコードされるべきかはHTTPリクエストとレスポンスのヘッダ情報に従うのが通常であり、文字化けの原因になるのでApacheの設定で指定しないほうが良い。
# AddDefaultCharset UTF-8 # コメントアウトするか
AddDefaultCharset off # offにする