ドメイン取得からSSL設定まで
Webサービス構築する時には大事な作業です。
▼ ここで解説する大まかな流れ
- AWS内からドメイン取得
- そのドメインをEC2インスタンスに設定
- LetsEncryptoでSSL対応させる
- ついでにSSLの自動更新もしておく
▼ それから前回の記事
一歩ずつ手順を踏んでいけば難しくありません。
このページの目次
まずはroute53から新規ドメイン名を取得する
AWSコンソールから[全てのサービス]を開きます
そこから route53 を探してください
▼ ネットワーキングとコンテンツ配信
▼ 取得したいドメインが利用可能か調べる
利用可能ならそのまま取得してください。
ドメイン取得は画面の流れに沿ってやるだけだから解説しません。料金に関してもクレカ登録してれば自動で引き落としてくれます。
料金は .com なら1年間で12ドル(=約1360円)
▼ ドメイン注文完了!
あとは支払い完了を待つだけ。その間、ドメインのステータスは「ドメインの登録 が進行中」になってます。有効になるまで待ってください
ちなみに支払い方法ですが・・・正規のクレジットカード以外にもVANDLEカードとかも使えますね。(この記事でも紹介したアレ : https://pisuke-code.com/vandle-card-is-savior-of-money/ )
それから1回以上クレカ払いしたら銀行振込も利用可能です。クレカ切れ・停止などのリスクが怖い人向けのオプションもあるのが嬉しい。閑話休題
Elastic IPアドレスをインスタンスに追加
続いてElastic IPアドレスの設定です。
ECインスタンスのIPアドレスは変わります。
だからそれをElasticIPで固定しないとダメです。
その設定はAWSコンソールkから [EC] にアクセス、そのあと [ネットワーク&セキュリティ] => [Elastic IP]というのを開いてください。
▼ そして [Elastci IPアドレスを割り当てる]をクリック
▼ 設定は特に変更する必要はなし
そのまま [割り当て] を押して大丈夫です。
そしたらElasticIpアドレス一覧に戻ります。
そして追加アドレスを選択して関連付けをします。
▼ つまりこのような操作をすればOK
▼ [インスタンス]から対象インスタンスを選ぶ
上画像のように [インスタンス] にElastic IPを割り当てたいEC2インスタンスを選択してください。設定したら [関連付ける]をクリックするだけです。
これで 52.199.xxx.xxx のようなElastic IPアドレスでアクセスできるようになりました。これは割り当てを解放しない限りはずっと不変です。
Route53から追加ドメインのDNSレコードを設定する
今度はRoute53からDNSレコードの設定です。
▼ Route53 => ホストゾーンを選択
そこから作成ドメインを選んでください。
そしたら [レコードを作成] を押します。
▼ このように新規DNSレコードを作る
▼ DNSレコード設定のポイント
- レコード名
ここには www を設定しておく。一般的にはドメインのホスト名と呼ばれるもの。AWSでは基本的にwwwありのURLを使う(wwwなしにする方法もあるが複雑で設定するメリットも薄い)
- 値
先ほど作成したElasticIPアドレスを入力。これでドメイン名とElasticIPアドレスが関連付けられ、取得ドメインでのアクセスが可能になる
追記 : wwwなしについても同様にAレコードを作ってください。これがないと hogehoge.com のようにwwwなしURLへのアクセスができません
これで大事なドメイン設定はすべて完了です!
補足.SSH接続情報が変わることに注意!
DNSレコード追加で1つ気を付けるべきこと
それはSSH接続ホスト名が変わることですね。
設定前はデフォルトのホスト名を使ってました。
▼ [インスタンス] => [接続] => [SSHクライアント]
ご使用のインスタンスの パブリック DNS を使用してインスタンスに接続: ec2-52-199-xxx-xxx.ap-northeast-1.compute.amazonaws.com
このように書いてあるんですが、DNSレコード設定するとホスト名に [ec2-52-199-xxx-xxx.ap-northeast-1.compute.amazonaws.com] みたいな形式は使えなくなります。
代わりに先ほど設定したElasticIPアドレスをホストに指定してください。ユーザー名(ec2-user)・パスワード(pemファイル)に関しては変更ありません
Lets encryptでSSL化(https対応)する
ここからはSSH接続してターミナルでの作業
まずはcertbotをインストールします。
※ ただしcertbot-autoは使えなくなった模様
まずは mod_ssl をインストールして有効化
▼ こちらのコマンド
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
$ sudo yum -y install mod_ssl Loaded plugins: extras_suggestions, langpacks, priorities, update-motd amzn2-core | 3.7 kB 00:00 amzn2extra-docker | 3.0 kB 00:00 amzn2extra-kernel-5.10 | 3.0 kB 00:00 Installed: mod_ssl.x86_64 1:2.4.51-1.amzn2 Dependency Installed: libtalloc.x86_64 0:2.1.16-1.amzn2 sscg.x86_64 0:2.3.3-2.amzn2.0.1 Complete! |
mod_sslはApacheをSSLに対応させるモジュール
これがないと話にならないので入れておきます。
certbotをsnapd経由でインストールする
▼ AmazonLinux2向けカスタムリポジトリを入れる
1 2 3 4 5 6 7 8 9 10 11 |
$ cd /etc/yum.repos.d/ $ sudo wget https://people.canonical.com/~mvo/snapd/amazon-linux2/snapd-amzn2.repo ~mvo/snapd/amazon-linux2/snapd-amzn2.repo --2021-12-28 05:07:25-- https://people.canonical.com/~mvo/snapd/amazon-linux2/snapd-amzn2.repo Resolving people.canonical.com (people.canonical.com)... 91.189.89.62 Connecting to people.canonical.com (people.canonical.com)|91.189.89.62|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 309 Saving to: ‘snapd-amzn2.repo’ ... |
▼ snapdをインストールする
1 2 3 4 5 6 7 8 9 |
$ sudo yum install snapd Loaded plugins: extras_suggestions, langpacks, priorities, update-motd snapd-amzn2 | 3.0 kB 00:00 snapd-amzn2/x86_64/primary_db | 8.9 kB 00:01 Resolving Dependencies --> Running transaction check ... |
snapdはパッケージ管理ツールのこと。
OS非依存のクロスプラットフォームみたいです。
▼ 自動起動の設定とシンボリックリンク
1 2 |
enable --now snapd.socket sudo ln -s /var/lib/snapd/snap /snap |
▼ snapdを有効化する
1 2 3 4 5 |
$ sudo snap install core ore 16-2.52.1 from Canonical? installed $ sudo snap refresh core snap "core" has no updates available |
▼ ようやくcertbotをインストール
1 2 |
$ sudo snap install --classic certbot certbot 1.22.0 from Certbot Project (certbot-eff?) installed |
▼ シンボリックリンクを張っておく
1 |
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot |
ここからが実際のSSL化作業となります。
次のコマンドを打つと色々聞かれるので答えます
▼ Certbotを実行
1 |
$ sudo certbot --apache |
▼ 色々聞かれるので正確に答える
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
Enter email address (used for urgent renewal and security notices) (Enter 'c' to cancel): - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Please read the Terms of Service at https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must agree in order to register with the ACME server. Do you agree? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - (Y)es/(N)o: y - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Would you be willing, once your first certificate is successfully issued, to share your email address with the Electronic Frontier Foundation, a founding partner of the Let's Encrypt project and the non-profit organization that develops Certbot? We'd like to send you email about our work encrypting the web, EFF news, campaigns, and ways to support digital freedom. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - (Y)es/(N)o: y Which names would you like to activate HTTPS for? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1: hogehoge.com 2: www.hogehoge.com - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Select the appropriate numbers separated by commas and/or spaces, or leave input blank to select all options shown (Enter 'c' to cancel): 2 Deploying certificate Successfully deployed certificate for www.hogehoge.com to /etc/httpd/conf/httpd-le-ssl.conf Congratulations! You have successfully enabled HTTPS on https://www.hogehoge.com |
今回は www.hogehoge.com のようなwwwありだけをHTTPS対応させています。なので (Enter 'c' to cancel): のあとに 2 を指定しています。
AWSでは設定の問題もあるのかwwwなしに対してSSL化させる方法が分かりませんでした。もし方法・代替案が分かったら追記します。
もしcertbotでこんなエラーが出たなら
▼ こんなエラーに遭遇
1 |
Unable to find a virtual host listening on port 80 which is currently needed for Certbot to prove to the CA that you control your domain. Please add a virtual host for port 80. |
この場合はhttps.confを編集します。
▼ httpd.confをvimなどで編集
1 |
sudo vim /etc/httpd/conf/httpd.conf |
▼ こういった内容を追加
1 2 3 4 5 6 7 8 |
NameVirtualHost *:80 <VirtualHost *:80> ServerAdmin root@[yourdomain] DocumentRoot /var/www/html ServerName [yourdomain] ServerAlias www.[yourdomain] </VirtualHost> |
※ [yourdomain]は各自環境のドメインで置き換え
▼ それからvhosts.confも編集(or 新規作成)
▼ こちらは次の内容を追加する
※ [yourdomain]は各自環境のドメインで置き換え
htaccessがドキュメントルートから使えるようにする
少し蛇足だけど .htaccess について
デフォルトだと無効化されてるみたいです。
もし .htaccess を使うなら、次の設定が必要
▼ httpd.confを開いて編集
1 |
sudo vim /etc/httpd/conf/httpd.conf |
▼ AllowOverride All に変える
1 2 3 4 5 6 7 8 |
<Directory "/var/www/html"> Options Indexes FollowSymLinks #AllowOverride None AllowOverride All Require all granted </Dicretory> |
▼ さらに参考になるかもしれない記事
これでhtaccess編集も対応OK
次回記事予告 : PHP+MySQLでWebアプリ環境構築
ここまでがドメイン設定・SSL化の手順です。
大変だったのはSSL設定などのサーバー設定でした
▼ そして次回は次の内容を記事を書こうと思います。
- 最新のPHP8をインストール/設定
- 最新のMySQL80のインストール/設定
- Webアプリ環境の構築
▼ その次回の記事
以上、AWSでのドメイン設定でした。ではまた