Alibaba Cloud DNS 事始め

ECS上にnginxを立てて、WordPressを動かしてみたのは良かったんですが、アクセスするURLがIPアドレスのまま!!
これじゃあダサい、という事で今回は以前作ったWordPressにAlibaba Cloud DNSを使ってドメインを設定してみたいと思います。
ついでにLet’s Encryptを使ってSSL化もしてみます。

Alibaba Cloud DNSについて

高可用性と高信頼性、スケーラビリティを備えた DNS サービスです。
売りとしてはAlibabaグループのサイトがDDoS攻撃され続けた10年間のノウハウが詰まった防御機能です。
最大 500,000 QPS までの防御力で DDoS 攻撃に対応できるようです。

Alibaba Cloud DNS 設定

「ドメインとホスティング」メニューから設定していきます。

メニューリンク

設定画面の右上にある「ドメイン名の追加」を押下します。

Alibaba Cloud DNS画面

取得したドメイン名をここで指定します。

今回は自分の寝かし続けているドメイン「euzwater.com」を、以前Alibaba Cloud上に立てたWordPress用に設定したいと思います。

ドメイン設定

ドメインの登録自体はこれで完了です。
ここから設定をしていきます。

登録完了!

ドメイン名をクリックし、DNS設定画面に進むと、画面上部にDNSサーバ名が表示されます。
これをドメインを取得したサービスのDNSサーバに指定してあげてください。
今回指定されたのは「ns7.alidns.com, ns8.alidns.com」でした。

DNSサーバ

サブドメイン「blog.euzwater.com」でECSのIPアドレスに飛ぶようにAレコードを設定しました。

Aレコード設定

「http://blog.euzwater.com/wordpress/」でWordPressのサイトが表示出来ました。

Alibaba Cloud DNSはとても簡単にDNSの設定ができるサービスです。
標準でDDoS攻撃からサイトを守ってくれるのもありがたいです。
Alibaba Cloud上でサイトをホスティングするのであれば、使うべきかと思います。

SSLの設定

せっかくドメインを追加したので次にLet’s EncryptというSSL/TLS証明書を無料で取得できるサービスを使って、証明書を取得、nginxに設定したいと思います。

ECSにrootユーザで接続します。

まずはEPELリポジトリを追加します。
Complete! が表示されればOKです。

$ yum install epel-release

次にLet’s Encrypt取得ツール「CERTBOT」をインストールします。

$ yum install certbot

さっそく証明書を取得してみましょう。

$ certbot certonly --webroot -w /usr/share/nginx/html -d blog.euzwater.com

自分と同じ環境の場合、urllib3モジュールが無いって怒られるかと思います。
すんなり進めた人はラッキーですね、メアドとか設定して証明書を取得してください。

ImportError: No module named 'requests.packages.urllib3'

pipコマンドを使ってモジュールのインストールを行えばエラーが解消されるはずです。

$ pip install requests urllib3 pyOpenSSL --force --upgrade
$ pip install --upgrade --force-reinstall 'requests==2.6.0'

うまく証明書が取得出来たら「重要注意事項」が表示されます。
証明書をここに配置しておいたよ!っていうメッセージです。
/etc/letsencrypt/live/blog.euzwater.com/fullchain.pem
/etc/letsencrypt/live/blog.euzwater.com/privkey.pem
この2つが証明書と鍵になります。

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/blog.euzwater.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/blog.euzwater.com/privkey.pem
   Your cert will expire on 2019-05-22. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot
   again. To non-interactively renew *all* of your certificates, run
   "certbot renew"
 - Your account credentials have been saved in your Certbot
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Certbot so
   making regular backups of this folder is ideal.
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

「/etc/nginx/conf.d/default.conf」を以下のように修正します。
1~5行目:httpをhttpsにリダイレクトする処理です。
10行目:SSLを使う設定です、「on」にします。
11行目:証明書ファイルが配置された場所を指定します。
12行目:証明書の鍵ファイルが配置された場所を指定します。
14行目以降:今までhttp側に入っていた設定をhttps側にします。

server {
    listen       80;
    server_name  blog.euzwater.com;
    return 301 https://$host$request_uri;
}

server {
        listen  443 ssl;
        server_name     blog.euzwater.com;
        ssl on;
        ssl_certificate         /etc/letsencrypt/live/blog.euzwater.com/fullchain.pem;
        ssl_certificate_key     /etc/letsencrypt/live/blog.euzwater.com/privkey.pem;

    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm index.php;
    }

    error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php$ {
        root           /usr/share/nginx/html;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
    client_max_body_size 10M;
}

設定が完了したらnginxを再起動します。

$ systemctl reload nginx

ブラウザでhttps://blog.euzwater.com/wordpress/を確認します。

サイト確認

無事表示できました、証明書も確認してみます。

証明書確認

Let’s Encryptで発行された証明書が確認できました。
有効期間が90日しかないので、cron等使って更新してあげる必要があります。

いかがだったでしょうか?
DNSの設定もSSLの設定も一昔前に比べたらとても簡単になりました。
非インフラエンジニアの人も苦手意識を持たず試してみてください。

ではまた。