LoginSignup
27
29

More than 5 years have passed since last update.

Let's Encrypt + Nginxでhttpsアクセスにする!

Last updated at Posted at 2016-01-27

概要

Let's Encryptを使って、友人に作ってあげた塾のWebページをhttpからhttpsアクセスにした話。
このページはNginxを使っているので、そこをhttpsにする設定も記す。

Let's Encryptとは?

Let's Encryptは、独自ドメインとWebサーバがあれば、誰でも簡単に Let's Encrypt の SSL/TLS 証明書を取得することができるオープンソースの取り組み。

SEO的にもhttpsの方が評価が高いらしいので、検索順位を上げたいなら導入する価値がある。(参考:『HTTPSをSEOで優遇』 SSL化を推奨するアルゴリズム導入をGoogleが公式発表

通常のSSL証明書を導入しようとしたらそこそこ高いので、そこまでセキュアじゃなくてもいいならばこれで充分かと。
もちろん、無料のものと有料のものには差があるので、そこを認識した上で使うこと。
参考:無料SSL/TLS証明書ができないこと

とりあえず、証明書を発行する

Let's Encrypt の使い方に従い、進める。
基本的にはこの通り。
コマンドだけまとめておく。

443ポートの開放と80ポート使っていたらそのプロセスを止めることを忘れずに。

letsencrypt導入

letsencrypt導入
$ git clone https://github.com/letsencrypt/letsencrypt
$ cd letsencrypt/
$ ./letsencrypt-auto --help
$ netstat -na | grep ':80.*LISTEN' # 80ポートを使っているものがないかを探す
$ sudo service nginx stop # あれば止める
$ sudo emacs /etc/sysconfig/iptables #443ポートを開放しないといけないので
$ # /etc/sysconfig/iptablesに下記を追加
$ # -A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT
$ sudo /etc/init.d/iptables restart # iptableをリスタート
$ ./letsencrypt-auto certonly -a standalone -d 自分のドメイン

※pythonが古いと怒られるので、新しめのpythonを入れる
参考:PyenvによるPython3.x環境構築(CentOS, Ubuntu)

nginxの設定

nginxの設定
$ sudo emacs /etc/nginx/conf.d/default.conf # nginxのconfをいじる

以下、nginx設定サンプル

default.conf
upstream unicorn {
  server unix:/tmp/unicorn.sock;
}
# httpをhttpsへリダイレクト
server {
  listen 80;
  server_name www.example.com;
  return 301 https://$host$request_uri;
}

server {
  listen 443 ssl;
  server_name www.example.com;

  # www.example.comの部分は適宜、自分のドメインに置き換える
  ssl_certificate /etc/letsencrypt/live/www.example.com/fullchain.pem;
  # www.example.comの部分は適宜、自分のドメインに置き換える
  ssl_certificate_key /etc/letsencrypt/live/www.example.com/privkey.pem;

  access_log /var/log/nginx/sample/sample_access.log;
  error_log /var/log/nginx/sample/sample_error.log;

  root /var/tmp/sample;

  location @unicorn {
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_pass http://unicorn;
    proxy_redirect http:// https://;
  }
}

nginxをrestartすれば完了!

$ sudo service nginx restart

スクリーンショット 2016-01-27 16.21.37.png

Let's Encrypt!

自動更新の仕組みを入れる

Why ninety-day lifetimes for certificates?
曰く、90日で期限が切れるため、自動更新の仕組みを入れる。

cronでやることをまず思いつくが、おそらくサーバー1台ならば素直にそれでやればいい。
証明書の自動更新設定を参考に。
※port80を使うので、一瞬nginxを止める必要がある

毎月2日の午前4時に実行
00 04 02 * * root service nginx stop && /home/shengbo-xu/letsencrypt/letsencrypt-auto certonly -d www.adachi-clias.com --renew-by-default && service nginx start
27
29
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
27
29