1. トップ
  2. nginxのwordpressサイトを常時SSL化する方法【FreeBSD】

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。

証明書の取得

おもむろに下記実行。

証明書を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");

 

はい、これにてしゅーりょー。

次は自動更新しないとだなぁ