Googleさんが常時SSLサイトの優先度を上げるって言ってたのと、Let'sEncryptという無料のSSL証明書があるってことだったので、このブログを完全無料で常時SSL化しました。
忘れる前にメモっておきます。
概要
このサイトはnginxでHTTPを受けて、サーバ内のWEB用JAILに振りわけています。
なので今回はHTTPを受けているnginxにSSL証明書をインストールし、諸々設定していきましょー。
let's Encryptのインストール
pkg install py27-letsencrypt
でEnterしてインストールできます。簡単。pkg最高。
証明書取得の準備
http://www.example.com/というドメインの証明書を取得する場合、まずは対象ドメインのserverディレクティブに下記を追記してservice nginx restart。
location /.well-known/ {
root /usr/local/www/nginx;
}
なにしてるかってーと、http://www.example.com/.well-known/っていうURLにアクセスがきたら、ドキュメントルートを/usr/local/www/nginxにする。
なので、前もって/usr/local/www/nginxを作成しておく。
証明書の取得
おもむろに下記実行。
letsencrypt certonly -w /usr/local/www/nginx -d www.example.com
webrootを選択して適当にメールアドレス入れてOK。
成功したら/usr/local/etc/letsencrypt/live/下にドメイン名のディレクトリができています。
証明書をnginxに設定
HTTPS用のserverディレクティブを追加します。僕のはこんな感じ。
# redirect start
server {
listen 192.168.0.1:80;
server_name www.example.com example.com;
return 301 https://www.example.com$request_uri;
}
# redirect end
server {
listen 192.168.0.1:443 ssl;
server_name www.example.com;
access_log /var/log/nginx/www.example.com-access_log main;
error_log /var/log/nginx/www.example.com-error_log;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Real-IP $remote_addr;
ssl_certificate /usr/local/etc/letsencrypt/live/www.example.com/fullchain.pem;
ssl_certificate_key /usr/local/etc/letsencrypt/live/www.example.com/privkey.pem;
location / {
proxy_pass 192.168.1.20:80;
}
}
んでおきまりのservice nginx restart。
これにて証明書の取得+インストール完了。
wordpressの常時SSL化
忘れちゃいけないwordpress側のSSL設定。
癖が強すぎて色々イカンことになっているwordpressさんの設定は本当にめんどくさい。wordpressやめたい。はぁ・・・あ、逸れた。
テーマファイルの編集
今使っているテーマファイルを編集して、javascriptやSNSボタンなどで「http://」から始まるリンクを全て「https://」に書き換え。grepしてviで置換すればおk。ただ対象の画像とかリンク先が「https://」にしてもアクセスできるかは確認。
サイト設定のURL変更
wordpress管理画面の「設定」→「一般」からサイトURLを「http://」から「https://」に変更。
記事に埋め込んだURL書き換え
これ一番めんどいんだろうな。
僕はですね、vhostでprepend.phpを読み込むようにしていてですね、その中にcallback関数書いたのでちょーよゆーでした。
function callback($buffer){
$buffer = str_replace('http://www.example.com', 'https://www.example.com',$buffer);
$buffer = str_replace('http://example.com', 'https://www.example.com',$buffer);
return $buffer;
}
ob_start("callback");
はい、これにてしゅーりょー。
次は自動更新しないとだなぁ