KUSANAGIのnginxでHSTSを設定する方法
※本ページはプロモーションが含まれていますブログやWebサイトをHTTPS化したのなら「HSTS」も設定しておく必要があります。
「HSTS」は、このサイトにアクセスするときは必ずHTTPSで接続するように指示できるHTTPヘッダーで、httpではじまるURLでアクセスしてもブラウザが自動的にhttpsのURLに書き換えてアクセスしてくれるようになります。
Googleは、HTTPS化したサイトは「HSTS」を有効化するようにとアナウンスしているので、HTTPSに対応したら「HSTS」の設定も忘れずにしておきましょう。
nginxでHSTSを設定する方法を紹介します。
nginxでHSTSの設定
nginxでsslを設定している設定ファイルを開く。
僕の場合はココ。
$ sudo vi /etc/nginx/conf.d/keikenchi_ssl.conf
「server_name」の下の行に下記のように「add_header」設定を1行追加。
server { listen 443 ssl http2; server_name keikenchi.com; add_header Strict-Transport-Security 'max-age=31536000; includeSubDomains;preload'; … }
KUSANAGIの場合は「add_header」が書かれている場所に書かないと上手く動作しなかった。
server { … location ~ [^/]\.php(/|$) { … add_header X-F-Cache $upstream_cache_status; add_header X-Signature KUSANAGI; add_header Strict-Transport-Security 'max-age=31536000; includeSubDomains;preload'; } }
設定ファイルに記述したら再起動
$ sudo systemctl restart nginx
これでOK。
一度ブラウザでhttpのURLでアクセスし、リロードしたらhttpsになるか確認する。
HSTSプリロードに登録
HSTSを設定したが、httpでアクセスした場合、httpsに書き換えられるのは2度めのアクセスからになる。
「HSTS Preload Submission」にドメインを登録しておけば、Firefox、Safari、IE11、Edge、Chromeでアクセスした場合は1度目のアクセスから自動でhttpsに書き換わる。
ドメイン(このブログなら「keikenchi.com」)を入力しEnterを押すだけ。
以上で完了。
エラー
The HSTS header on that site doesn't include a preload token. This is a non-standard token but it's used to authenticate the preload request. Fix the HSTS header and try again.
というエラーが出るようなら、nginxの設定ファイルの「add_header」に「preload」が付いていないはずなので、「preload」を追加する。
add_header Strict-Transport-Security 'max-age=31536000; includeSubDomains;
↓
add_header Strict-Transport-Security 'max-age=31536000; includeSubDomains;preload';
オーケーになった
httpでアクセスしたい
なんらかの理由でHTTPSをやめてhttpに戻したい場合は、先ほど設定した「add_header」の「max-age=31536000」を「max-age=0」にすれば良い。
おわりに
HTTPS化したのならHSTSの設定は忘れずにしておきましょう。