Ubuntu18.04でApache2/vhost/SSL化/BASIC認証

たまにやるのでメモ。

Ubuntu18.04だけどGCPのComputeEngineでやるのでufwは使わない。

Firewall設定の [Allow HTTP/HTTPS traffic] をONにしとく。

そして、先にDNSにAレコード登録しておく。

おまじない

sudo apt update -y; sudo apt upgrade -y

Apache2インストール

sudo apt install apache2 -y

サーバーバージョンは隠したいのでServerSignatureを無効にする。
/etc/apache2/apache2.conf に下記を追記。

ServerSignature Off
ServerTokens Prod

VirtualHost設定

以下www2は適宜書き換える。

ディレクトリを用意する。
そしてsudoしなくても操作できるようにオーナーを自分にする。

cd /var/www
mkdir www2
sudo chown ${USER}:${USER} www2
sudo chmod 755 www2

conf作る。

cd  /etc/apache2/sites-available
sudo cp 000-default.conf www2.conf

/etc/apache2/sites-available/www2.confにvirtual host設定を追記する。
ServerNameはDNSにAレコード登録したFQDNにする。

<VirtualHost *:80>
  ServerAdmin root@localhost
  ServerName www2.kwonline.org
  DocumentRoot /var/www/www2
  ErrorLog ${APACHE_LOG_DIR}/error.log
  CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

conf切り替えてApache再起動。

sudo a2ensite www2.conf
sudo a2dissite 000-default.conf
sudo systemctl restart apache2

SSL化

LetsEncryptのcertbotを使う

sudo add-apt-repository ppa:certbot/certbot

確認メッセージが出るので[Enter]キーを押す。
以下www2のFQDNは適宜書き換える

sudo apt install python-certbot-apache -y
sudo certbot --apache -d www2.kwonline.org

メアドやHTTPのリダイレクトについて質問されるので適宜答える。

BASIC認証

htpasswdコマンドの初回実行時のみ[-cオプション]を付ける

cd /etc/apache2
sudo htpasswd -c .htpasswd myuser1

/etc/apache2/sites-enabled/www2-1-le-ssl.conf というファイルがあるので下記を 「VirtualHostディレクティブの中」に追記する。
外に書いても動かない。
もし特定のディレクトリのみBASIC認証をかけたい場合は指定すればOK。
正規表現も使える。
詳しくはここに書いてある。

  <Directory "/var/www/www2/">
    AuthType Basic
    AuthName "Password Required"
    AuthUserFile /etc/apache2/.htpasswd
    Require valid-user
  </Directory>

最後にApache2を再起動して完了

sudo systemctl restart apache2