AWS LightSailにおける様々な設定

# 目次
[Basic認証](#basic認証)
[DNS連携freenom](#dns連携freenom)
[SSL化](#ssl化)


# Basic認証
Basic認証とは、サイト閲覧の際にパスワードなどでアクセス制限をかけること。
主に開発段階のサイトや開発用に使用するサイトにて、関係者以外閲覧させないようにする際に使用されることが多い。

触るファイルは3つ
.htaccess
→サイトにアクセスしてきた来訪者を別ページに誘導したり、認証をかけたりできるファイル。
.htpasswd
→認証におけるユーザー名とパスワードを設定するファイル。
wordpress-https-vhosts.conf
→apache(webサーバー)の設定ファイル。vhostsはヴァーチャルホストの意味らしい。


```/opt/bitnami/wordpress/.htaccess
<Files ~ "^\.(htaccess|htpasswd)$">
deny from all
</Files>
Options -Indexes
AuthUserFile /opt/bitnami/wordpress/.htpasswd
AuthGroupFile /dev/null
AuthName "Please enter your ID and password"
AuthType Basic
require valid-user
order deny,allow
```

すでにファイルがある場合、以上のものを追記する。


```/opt/bitnami/wordpress/.htpasswd
# あくまでサンプルです。「ユーザー名:暗号化されたパスワード」の並びです。
test:$apr1$Ef4D6g1suPHnnnoiCt.
```

.htpasswdはhtpasswdコマンドを打ち込んで、作成する。
`htpasswd -c /opt/bitnami/wordpress/.htpasswd ユーザー名`
-cはユーザーとパスワードが書かれたファイルを新規作成/上書きするという意味。上書きされたくなければ -c を取って、ファイル名を指定することが必要。


```/opt/bitnami/apache2/conf/vhosts/wordpress-https-vhost.conf
#省略
 <Directory "/opt/bitnami/wordpress">
    Options -Indexes +FollowSymLinks -MultiViews
    AllowOverride None
    Require all granted
    # BEGIN WordPress fix for plugins and themes
    # Certain WordPress plugins and themes do not properly link to PHP files because of sy
mbolic links
    # https://github.com/bitnami/bitnami-docker-wordpress-nginx/issues/43
    RewriteEngine On
#省略
```

AllowOverrideの項目にNoneが設定されています。
__NoneをAllに書き換え、AllowOverrideディレクティブ(指示文)の設定を許可するようにします。__
これは`<Directory "/opt/bitnami/wordpress">`が示すように、指定されたディレクトリの設定を許可するか否かを決める役割を担っています。
/opt/bitnami/wordpressの設定を許可するということは、その中に存在する.heaccessファイルを読み込むことになるため、Basic認証が許可されることとなります。

https://www.javadrive.jp/apache/allow/index4.html

https://qiita.com/masakuni-ito/items/3d951035884184632b99#-c

https://www.javadrive.jp/servlet/jsp_directive/index1.html

以上の3つのファイルを設定すればBasic認証の設定は以上です。
その後、webサーバーであるapacheを再起動しサイトに認証がかかっているか確認してみましょう。

```
# apacheの再起動
sudo /opt/bitnami/ctlscript.sh restart apache
```

# dns連携freenom
DNS、いわゆるドメインですね。`http://example.com` みたいなやつ。
元々、サーバーはIPアドレスと言う固有の数字が与えられています。`例)http://123.45.22`
人間がわかりやすいようにIPアドレスにドメインを紐付けることにより、123.45.22にアクセスした時と、example.comにアクセスしたときどちらも同じ挙動をするようになります。

そのドメインの紐付けを行います。
### freenomの場合：
freenomは無料でドメインを取得できるサービスです。.comや.jpではなく、.tkや.mlなどが利用できます。
ドメインは好きな名前にしてもらえれば大丈夫ですが、 .tkや.mlなど最後まで指定を行うと取得することができます。
ドメイン取得後はメニューのServisesからMyDomainsを選択し、取得したドメインを確認していきます。

取得した、ドメインをlightsailに紐づけていきます。
Network欄のDNSゾーンの作成から、登録済みドメインの入力をしていきます。
この時、`http://`は不要です。
作成できたらレコードの追加をしていきます(ここが本番)


|`record名`    |`subdomain入力`                 |
|----------|--------------------------|
|A record    |*@*                  |
|CNAME record |*www*         |

resolves toには、staticIPを入力します。
これによりstaticIPで固定された、IPアドレスとの連携ができます。

その下のName serversと書いてある場所に、4つほど情報が書いてあります。
その情報をfreenomのManagementTools->NameServerの欄に入力しDNSサーバーと連携します。

これにより、取得したドメインでのアクセスが可能になります。
もちろんstaticIP　アドレスもしくはドメイン、どちらでもアクセスすることは可能です。

※若干反映に時間がかかるかもしれません。
自分は10分待てば、アクセスできました。
こういったドメインの紐付けには、最大48時間かかることもあるようです。


https://www.mikanusagi.com/entry/2020/10/31/freenom_%E3%81%A7%E7%84%A1%E6%96%99%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E3%82%92%E5%8F%96%E5%BE%97%E3%81%97%E3%81%A6%E3%81%BF%E3%81%9F

https://lightsail.aws.amazon.com/ls/docs/ja_jp/articles/lightsail-how-to-create-dns-entry

https://linuxfun.org/2021/02/06/how-to-assign-domain-name-to-lightsail-instance/

https://www.freenom.com/ja/index.html



# SSL化

Amazonが公式に「Amazon LightSailのBitnamiスタックにSSL証明書をインストールする」という記事を出しています。
こちらを参考にしました。

https://aws.amazon.com/jp/premiumsupport/knowledge-center/linux-lightsail-ssl-bitnami/


やったこととしては、

```
sudo /opt/bitnami/bncert-tool を実行

domain list []
が出ると、ドメインとwwwつきドメインを入力 例)test.tk www.test.tk

#それぞれ出てきた項目には以下のように答える

Enable HTTP to HTTPS redirection y
Enable non-www to www refirectin n
Enable www to non-www redirection n
Do you agree to these changes y
e-mail address #自分のメールアドレスを入力してね
Do you agree to the let's Encrypt Subscriber Agreement y

press [enter] to continue

```
エラーが出たら、もう一度`sudo /opt/bitnami/bncert-tool`を実行してみるといいかもしれません。

うまく設定できていればSSL化の90日間期限も自動的に更新してくれるみたいです。

またこれはあくまで一例であり、WordPressのSSL化は他にも方法があるそうです。今回は、LightSailにおいての方法を公式に乗っ取ってやってみました。