[Nginx] http を https にリダイレクトする設定 & HTTP Strict Transport Security (HSTS) 対応

Nginx で http リクエストを https にリダイレクトする設定と HTTP Strict Transport Security (HSTS) の設定の2つをご紹介します。

http を https へリダイレクトする設定

以下のように return 301 https://$host$request_uri; の部分で 301 リダイレクトさせてます。

server {
    listen 80;
    server_name example.com;
    return 301 https://$host$request_uri;
server {
    # 'http2' requires nginx 1.9.5+. If using older nginx, replace with 'spdy'.
    listen 443 ssl http2;
    server_name example.com;

HTTP Strict Transport Security (HSTS) の設定

server {
    listen 443 ssl http2;
    # HTTP Strict Transport Security: tells browsers to require https:// without first checking
    # the http:// version for a redirect. Warning: it is difficult to change your mind.
    #    max-age: length of requirement in seconds (31536000 = 1 year)
    #    includeSubdomains: force TLS for *ALL* subdomains (remove if this is not what you want)
    #    preload: indicates you want browsers to ship with HSTS preloaded for your domain.
    #    Submit your domain for preloading in browsers at: https://hstspreload.appspot.com
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
    # If you won't/can't turn on HTTPS for *all* subdomains, use this simpler version:
    # add_header Strict-Transport-Security "max-age=31536000;" always;

HSTS Preload リストへ登録する

Google では ドメインを HSTS Pre-loaded List に登録するサービス を行っています。記載された手順に従ってドメインを登録すれば、今後ブラウザとそのドメインとの間に安全でない通信は起こらなくなります。これに登録するには Strict-Transport-Security ヘッダに preload パラメータを含める必要があります。

[引用元] HTTP Strict Transport Security – Web セキュリティ | MDN

とのことなので HSTS Preload List Submission から登録しましょう。

HSTS Preload List を登録するための条件として、

  • サブドメインは指定できないのでネイキッドドメインを指定する
  • add_header で includeSubDomains を設定する


今の時代 GoogleのHTTPSサイト優遇方針で待ったなし! と言われていることもあり、未対応のサイト運営者は早めに対応したほうがよさそうです。


[Mac] brew update で Error: /usr/local must be writable! 対応

brew update で Error: /usr/local must be writable! がでたときの対応方法です。

$ brew update
Error: /usr/local must be writable!

調べるとまず brew doctor してみてと書いてあったので、やってみます。

$ brew doctor
Please note that these warnings are just used to help the Homebrew maintainers
with debugging if you file an issue. If everything you use Homebrew for is
working fine: please don't worry and just ignore them. Thanks!
Warning: /usr/local is not writable.
You should probably change the ownership and permissions of /usr/local
back to your user account.
  sudo chown -R $(whoami) /usr/local
Warning: /usr/local is not writable.
Even if this directory was writable when you installed Homebrew, other
software may change permissions on this directory. For example, upgrading
to OS X El Capitan has been known to do this. Some versions of the
"InstantOn" component of Airfoil or running Cocktail cleanup/optimizations
are known to do this as well.
You should probably change the ownership and permissions of /usr/local
back to your user account.
  sudo chown -R $(whoami) /usr/local
Warning: Some installed formula are missing dependencies.
You should `brew install` the missing dependencies:
  brew install oniguruma
Run `brew missing` for more details.
Warning: Your Homebrew is outdated.
You haven't updated for at least 24 hours. This is a long time in brewland!
To update Homebrew, run `brew update`.

sudo chown -R $(whoami) /usr/local しろと書かれているので、実行して brew update を再実行してみます。

sudo chown -R $(whoami) /usr/local

次は update.sh: line 13: /usr/local/Library/ENV/scm/git: No such file or directory ってエラーが発生しました。

brew update
/usr/local/Library/Homebrew/cmd/update.sh: line 13: /usr/local/Library/ENV/scm/git: No such file or directory
/usr/local/Library/Homebrew/cmd/update.sh: line 13: /usr/local/Library/ENV/scm/git: No such file or directory
Error: update-report should not be called directly!
brew prune

たまに brew update すると苦労しますね・・・。


[Git] merged な remote branch を一括削除するコマンド

Git で merged な remote branch を一括削除するコマンドをご紹介します。


git branch --remote --merged master | \
grep -v -e master -e release -e staging | \
sed -e 's% *origin/%%' | \
xargs -I% git push --delete origin %

前提として master, release, staging branch は対象外としています。




git remote prune origin


git fetch --prune

git pull --prune

というように –prune オプションを付ければ同期できます。


[WordPress] AMP プラグインを利用して Accelerated Mobile Pages 対応する方法

WordPress で「AMP」プラグインを利用して Accelerated Mobile Pages 対応した道のりをご紹介します。


まず、AMP を管理画面からインストールして、プラグインを有効化します。

AMP Test ツールで確認する

AMP Test

Not a valid AMP page
Invalid AMP pages will not have AMP-specific features in Google search results


Prohibited or invalid use of HTML Tag

  • The tag ‘plusone’ is disallowed.
  • The tag ‘share-button’ is disallowed.

不正な HTML タグを確認してみたところ、どちらも WP Social Bookmarking Light プラグインを使って設置しているボタンが原因みたいでした。

WP Social Bookmarking Light の設定を AMP Valid に変更する

Google +1 ボタンは AMP Valid な HTML タグに変更する設定が見当たらなかったので、この機会に削除しました。

Facebook Share ボタンはタグの設定を xfbml から html5 へ変更することで対応しました。

対応後に再び AMP Test をかけてみると Valid AMP page のメッセージが無事、表示されました。

Search Console から Accelerated Mobile Pages のエラーをチェックできる

Accelerated Mobile Pages のエラーは Search Console から確認することができます。

HTML タグの禁止された用法、無効な用法(問題の重大性: 致命的) などの重要な通知


AMP 対応しておくと Google に気に入られて SEO 効果もあるかもしれません。

基本的にプラグイン1つで対応できるので、早めに AMP 対応をしておくとライバルサイトに差をつけることができるかもしれませんね。


[MongoDB] Storage Engine の確認方法

MongoDB で Storage Engine (ストレージエンジン) を確認する方法をご紹介します。

MongoDB version 3.x

db.serverStatus() コマンドで Storage Engine が MMAPv1 か WiredTiger を確認できます。

{ "name" : "wiredTiger" }

MongoDB version 2.x 以下


Storage Engine は MMAP 一択で選択できないので、確認する方法もありません。