Apacheのインストールと初期設定のメモです。
環境
OS は Ubuntu 18.04 LTS です。
インストール
パッケージマネージャーから Apacheをインストール。
sudo apt install apache2 -y
初期設定
セキュリティ対策として以下のを設定します。
- CGIを無効化
- HTTPレスポンスに極力サーバー情報を表示しないよう設定
- Apacheのエラーページに表示されるサーバー情報を非表示に設定
- タイムアウト時間の変更
- 不要なディレクトリへのアクセス拒否設定
- ブラウザにディレクトリを表示しないよう設定
# CGIを無効化
sudo a2disconf serve-cgi-bin.conf
# バックアップを取ってから security.conf を編集
cd /etc/apache2/conf-available
sudo cp security.conf security.conf.bak # バックアップ
sudo nano security.conf
/etc/apache2/conf-available/security.conf
# HTTPレスポンスのサーバー情報を "Apache" のみにする
ServerTokens Prod
# エラーページにサーバー情報を表示しない
ServerSignature Off
# apache2.conf を編集
cd /etc/apache2
sudo cp apache2.conf apache2.conf.bak # バックアップ
sudo nano apache2.conf
/etc/apache2/apache2.conf
# タイムアウト時間を変更
Timeout 60
# デフォルトのOptionsは何もつけない (Noneに設定)
<Directory />
Options None
</Directory>
# 不要なディレクトリへのアクセスを拒否
<Directory /usr/share>
AllowOverride None
Require all denied
</Directory>
# ブラウザにディレクトリを表示しないよう設定
<Directory /var/www/>
Options FollowSymLinks # "Indexes" を消す
AllowOverride None
Require all granted
</Directory>
Webサイトの設定
初期設定が終わったら、Webサイトの設定を行います。
Webサイトのルートディレクトリは “/var/www/mysite” とすることにします。
Apacheでは、Webサイトの設定は VirtualHost という設定項目で行います。Apacheは複数のWebサイト (URLドメインが異なるWebサイト) をホストすることができ、その場合はWebサイトの数だけVirtualHost設定を書くことになります。
VirtualHost設定はファイルに分割して書くことができるため、通常はわかりやすいようにWebサイト1つに対して1つのファイルを作成します。
そしてUbuntu では、VirtualHostを書いた設定ファイルは sites-available フォルダに置くのが慣例となっています。
このフォルダには初めから “000-default.conf” というファイルがあるのですが、このファイルの説明をする前に、VirtualHostについてもう少し詳しく説明します。
VirtualHostには “ServerName” という設定項目があり、ここにWebサイトのドメイン名 (URLのホスト名) を記述します。
ApacheがWebサイトへのアクセスを受け、URLのドメイン名と一致する ServerName が設定された VirtualHost 設定を見つけると、そこに書かれた “DocumentRoot” 項目に書かれたフォルダからWebサイトのファイルを読み込み、ブラウザへレスポンスを返します。
複数のWebサイトをホストする時は、それぞれのVirtualHostの “ServerName” 項目に、ホストするWebサイトのドメイン名を記述します。
ここで、もしIPアドレスを直書きした場合など、ドメイン名と一致する ServerName が見つからなかった場合、Apacheは一番初めに読み込んだVirtualHost設定を使用します。
設定ファイルは名前順に読み込まれますので、この “000-default.conf” というファイルが一番初めに読み込まれる VirtualHost となります。
意図したドメイン名以外のURLでアクセスされた場合は、アクセスを拒否するのがセキュリティ的にも好ましいため、この “000-default.conf” には全てのアクセスを拒否する設定を記述します。
/etc/apache2/sites-available/000-default.conf
# "http" アクセスのための VirtualHost 設定
<VirtualHost *:80>
ServerName default # "ServerName" はドメイン名として存在しない名前を設定
# ルートディレクトリ "/" へのアクセスを全て拒否
<Location />
Require all denied
</Location>
# ログの設定: ほとんどの場合デフォルトのままでOK
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
# "https" アクセスのための VirtualHost 設定
<VirtualHost _default_:443>
ServerName default
<Location /> Require all denied </Location>
# SSL証明書ファイルは Apache インストール時に作られる自己証明書を設定
SSLCertificateKeyFile /etc/ssl/private/selfsigned.key
SSLCertificateFile /etc/ssl/certs/selfsigned.crt
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
続いてWebサイト用の VirtualHost 設定を書きます。
ファイルを分けておいた方がわかりやすいので、”010-mysite.conf” というファイルに記述することにします。
sudo touch /etc/apache2/sites-available/010-mysite.conf
sudo nano /etc/apache2/sites-available/010-mysite.conf
/etc/apache2/sites-available/010-mysite.conf.conf
# Webサイトの設定
<VirtualHost *:80>
ServerName example.com # Webサイトのドメイン名
DocumentRoot /var/www/mysite # Webサイトのファイルを配置したディレクトリ
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
<VirtualHost _default_:443>
ServerName example.com # Webサイトのドメイン名
DocumentRoot /var/www/mysite # Webサイトのファイルを配置したディレクトリ
# SSL証明書の作成に使った秘密鍵
SSLCertificateKeyFile /etc/ssl/private/mysite.key
# 認証局から受け取ったSSL証明書
SSLCertificateFile /etc/ssl/certs/mysite.crt
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
SSL証明書の秘密鍵と証明書は、認証局から証明書を購入すると通知されますので、それをファイルに保存して設定します。
最後に、必要なモジュールと上記で作成した mysite.conf ファイルを有効にします。
モジュールは、SSLモジュールの他にRewriteもよく使いますので、初めに有効にしておくと良い思います。
Ubuntuでは、モジュールや .conf ファイル の有効化は、a2enXXX というコマンドで行うことができます。
sudo a2enmod ssl # SSLモジュールを有効化
sudo a2enmod rewrite # Rewriteモジュールを有効化
sudo a2ensite mysite # mysite.conf を有効化。コマンドでは .conf は不要です。
sudo systemctl restart apache2 # Apacheを再起動して設定を反映
以上でApacheのインストールと初期設定は完了です。