2
3

More than 3 years have passed since last update.

Lightsailで独自ドメインを付けてSSL認証にする。

Last updated at Posted at 2021-08-23

前提

あいからわず自分用メモに近い記事です。

読む方のために、スクリーンショットやコマンドを細かく記載していきますので、参考資料というより
実際にやらなくてもやったつもりになれる記事を目指していきます。

Route53で直接ドメインを取れば簡単なのかもしれませんが、今回は別のGoogleDomainsで取得中のドメインを使ってLightsail上のnginxに紐づけてrailsアプリを起動させるところまでやっていきます。

なお、モザイクや黒塗りが好きではないですが、スクリーンショットは加工してあり、
独自ドメインの部分にmydomain.app
静的IPのところを99.83.154.118と直しています。

現在までの状態

LightsailでAmazonLinux2インスタンスを作ります。

AmazonLinux.jpg
その後AmazonLinux2インスタンスに静的IPアドレスを紐づけています。
AmazonLinuxStaticIp.jpg

ここにSSHアクセスして、環境整備してnginxが起動できるところは省略します。

...
...
ということで
Webサーバにnginxをインストールしました。

今回の動作にはnginxだけで大丈夫なので、とりあえずアプリケーションサーバは切っていて、
静的IPアドレスでアクセスすると、nginxのエラーが出る画面となっています。

firefox http://99.83.154.118

were sorry.png

nginxの返答が返ってきているのでWebサーバは動いていますね。

DNSゾーンを作成しサブドメインを登録

私はGoogleDomainsで以前から取得しているドメインがあります。(ここではmydomain.appとします)
そのサブドメインの管理のみLightsailのDNSゾーンで管理します。

実質的にはRoute53のようですが、Lightsail内から操作でき、シンプルな設定内容なので初心者に優しくなっています。

今回は開発中のアプリのテストサーバーとしての用途なので、dev.mydomain.app
でホストゾーンを作成します。
作成されたら、Aレコードを追加して、サブドメインとLightsailインスタンスを紐づけします。
Arecore.jpg

GoogleDomainsのカスタムネームレコードにRoute53で作ったホストゾーンのNSを登録する。

ではDNSが見つけてくれるよう、親ドメインへネームレコードの登録と行きます。
Lightsail上のDNSゾーンの詳細の中のネームサーバーの4行をGoogleに登録していきます。
mydomain.appDNSzone.jpg

上のLightsailのネームサーバを、親ドメインであるGoogleDomainsのカスタムレコードに追加します。
3行目のdev.mydomain.appが今回追加したNSレコードです。
GoogleDomainsCustomRecord (1).jpg

ネームサーバーが一致していますね。

名前解決がされることを確認します。
refused.jpg
と表示されます。

自分が詰まったところだったのですが、今回の親ドメインがappドメインだからです。
app,devドメインは比較的新しいドメインで、SSL適用が必須のドメインとなっています。

ブラウザからのアクセスですと、ブラウザ内でURLの書き換え処理がなされ、HTTP指定をしてもアクセスがHTTPSアクセスへと変換されてしまいます。
そのため、現段階の設定では拒絶されます。

curlやdigコマンドで名前解決がなされているか確認して、それで動いていればそのままSSLを適用していきます。

curl http://dev.mydomain.app
<!DOCTYPE html>
<html>
<head>
  <title>We're sorry, but something went wrong (500)</title>
  <meta name="viewport" content="width=device-width,initial-scale=1">
  <style>
...
...

きちんとHTMLが返ってきましたので、独自ドメインの紐づけが完了しています。

digでも確認してみます。

dig http://origin.dev.mydomain.app
;; QUESTION SECTION:
;origin.dev.mydomain.app.                IN      A

;; ANSWER SECTION:
origin.dev.mydomain.app. 60      IN      A       99.83.154.118

lightsailで取得した静的IPが返ってきていますので、大丈夫です。

ディストリビューションを作成する

AWSでのCloudFrontという機能なのですが、Lightsailではディストリビューションを作成するという名前で作成します。

ネットワーキングタブからディストリビューションの作成を選びます。
distribution.png

cloudfrontは、Webサーバーの直接アクセスをさせずに、cloudfrontだけがWebサーバーにアクセスをし、キャッシュを取得してから配信する仕組みです。
オリジンとなるWebサーバーにLightsailインスタンスを指定します。
origin.png
他の設定はあまりわかっていませんが、ディストリビューション(cloudfront)の一意の名前は
www.dev.mydomain.appとしました。
price.png

作成したディストリビューション(cloudfront)でSSL証明書を作成します。

certificate.jpg

LightsailのDNSゾーンにCNAMEレコードを追加することで所有者の確認と証明書の付与がなされます。
名前に当たるところに末尾のdev.mydomain.appも入っているので、注意して入力します。

ce (1).jpg

証明書側とDNSゾーン側でコピペする項目名が違うので注意が必要です。

ディストリビューション側 DNSゾーン側
名前 サブドメイン
マップ先

dns.jpg

CNAMEを登録しての、所有の確認による検証には結構時間がかかります。
一旦ここで休憩をいれます。



10分ほどで反映されると読んだのですが、40分ほどかかりました。

検証が済み、ディストリビューションに用意されたアドレスでのアクセスでSSLが適用されました。
デフォルトのドメイン名.jpg

j35ggtd784fpdj.cloudfront.netのリンクをクリックして
保護マークがついていることを確認します。
went wrong.jpg

最後にディストリビューションがカスタムドメイン使うことを有効にします。
無効.png
有効.jpg

DNSゾーンでCNAMEの関連付け

最後にDNSゾーン(dev.mydomain.app)に戻って、
www.dev.mydomain.appdev.mydomain.appのアドレスレコードをディストリビューションに紐づけます。

Arecord1.jpg
Arecord2.jpg

ここではAレコードとして解決先を登録していますが、ディストリビューションがしっかりプルダウンで出てきますので、選択することでアドレスレコードとしてではなく、エイリアスレコードになるようです。

ここでも10分~40分ほど待てばOKでしょうか?


今回は10分ほどで完了しました。

finish.jpg

なお、nginx⇔ディストリビューション(cloudfront)間の通信は初期設定のままHTTPとして設定しました。

なので、この後pumaをproductionで起動させてみたのですが、リダイレクトループが起こりました。
pumaの設定force-sslをコメントアウトにすることで解決できました。

config/environments/production.rb
# config.force_ssl = true

一度リダイレクトループが起こってわけがわかりませんでした。
これから開発でまたSSL関連でエラーに合うかもしれませんが、とりあえずはVPS、SSLが最安級で設定できていると思っています。

Lightsailサービス 値段
Lightsailインスタンス $3.5
静的IP紐づけインスタンス $0.0
DNSゾーン(Lightsail版Route53) $0.0(予定)
ディストリビューション(Lightsail版cloudfront) $2.5まで
合計 $6.0

DNSサービスにRoute53では料金がかかっていたので、もしかしたらLightsailDNSゾーンでも料金がかかっているかもしれないので、その場合はまた追記します。

ロードバランサーを入れないことでSSLが安くできたので、よかったなと思います。

参考にしたサイト

Google Domainsで管理しているドメインのサブドメインをRoute53で作成する
【目指せ最安Webサイト】AWS+LightSailのディストリビューションを使ってWordPressをSSL化する方法。注意点・ACMの良い所
Lightsail が CloudFront をサポートしたようなので試してみた。
.devドメインと.appドメインがHTTPSを強制する仕組み

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3