GCP + CentOS6(VM) + nginx にSSL(certbot)入れちゃう


今回やること

GCP + CentOS6(VM) + nginxにSSL入れてhttps接続してみよう

情報収集

GCPでLet's EncryptしてSSL(TLS)の表示
GCPでLet's encryptでSSL(TLS)を自動更新
Let's Encrypt で Nginx にSSLを設定する
Nginxでリクエストを強制的にhttps(TLS)にリダイレクトする
HTTP > HTTPSへのリダイレクト設定後にNGINXがリダイレクトを繰り返す問題への対応
certbot入れてsslを取得して、nginxに設定するのね。

certbot入れちゃう

gcpにsshで接続
とりあえずnginx停止
sudo service nginx stop
git入れる
sudo yum install git
certbotをgit clone
cd /usr/local
sudo git clone https://github.com/certbot/certbot.git

SSL証明書取得

以下実行
cd /usr/local/certbot
./certbot-auto certonly --standalone -t
その後以下の入力確認が
Enter email address (used for urgent renewal and security notices) (Enter 'c' to cancel):
メールアドレス入力
(A)gree/(C)ancel:
アグリー!
(Y)es/(N)o:
なんかメール送るけどいい?みたいな質問なのでNO
Please enter in your domain name(s) (comma and/or space separated) (Enter 'c' to cancel):
ドメイン名入力(ドメイン名とwww.ドメイン名を入力 スペースで区切る)
出来たっぽい。。。

nginxの設定

下記修正は/etc/nginx/conf.d/にあるdefault.confを修正してもいいし
別confで作成しても問題ないと思います。
私は/etc/nginx/conf.d/にある既存のファイルをバックアップして、ドメイン名のconfファイルを作成しました。

cd /etc/nginx/conf.d
sudo mv default.conf default.conf.org
sudo mv ssl.conf ssl.conf.org
sudo mv virtual.conf virtual.conf.org
sudo cp default.conf.org ドメイン名.conf

作成したドメイン名.confを以下のように修正

server {
    listen      80;
    server_name ドメイン名;
    return 301 https://ドメイン名$request_uri;
    ※リダイレクト
}
server {
    listen      80;
    listen      443;
    server_name www.ドメイン名;
    return 301 https://ドメイン名$request_uri;
    ※リダイレクト
}

server {
    listen              443 ssl default_server;
    listen              [::]:443 ssl;
    server_name         ドメイン名;
    ssl_protocols       TLSv1.1 TLSv1.2;
    ssl_certificate     /etc/letsencrypt/live/ドメイン名/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/ドメイン名/privkey.pem;
    (中略)
}

nginx.confの読み込みファイルを修正する

    #include /etc/nginx/conf.d/*.conf;コメントアウト
    include /etc/nginx/conf.d/ドメイン名.conf;

nginx起動
sudo service nginx start
sudo service nginx reload
sudo service nginx restart
起動した!!
GCPのVMにてファイアウォールを設定

接続確認


httpでもhttpsでもwwwでも接続できた!
イエイ

certbot自動更新設定

cronに以下を設定
crontab -e

0 4 1 * * root /usr/local/certbot/certbot-auto renew --post-hook "service nginx restart"

うまく動くか、今日確認できそう。
でも眠いからお休みなさい。

これまでの作業

GCP復活の作業履歴
放置してたGCPを復活させる(1)- プロジェクト作成 -
放置してたGCPを復活させる(2)- VMインスタンス作成 -
放置してたGCPを復活させる(3)- gcloud CLIインストール -
放置してたGCPを復活させる(4)- PC(Windows10)からVMにssh接続 -
放置してたGCPを復活させる(5)- VMのIPを固定する -
放置してたGCPを復活させる(6)- nginxインストールとhttp設定 -
放置してたGCPを復活させる(終わり)- 独自ドメインの設定 -