LoginSignup
16
20

More than 5 years have passed since last update.

nginxでhttps通信をできるだけ高速化する

Posted at

概要

テニスプレイヤーがLaravelでWebサービス作ってみたの個別記事です。

Let's Encryptでhttps通信を実現した後、httpsのオーバーヘッドをできるだけ少なくして、画面表示までの時間を短くしたときに使ったnginx.confの設定を記載します。個々がどんな技術かは詳しく記載しません。

Webサーバ上でphp(Laravel)が動作する、リバースプロキシやロードバランサを経由させない構成を想定しています。

nginx + Let's Encryptの設定についてはさくらのナレッジがとってもわかりやすいです。

  • gzip圧縮
  • http/2
  • OCSP

gzip圧縮

いきなりhttps関係ないですが、クライアントとサーバでファイルをやりとりする時に、対応するブラウザであればファイルをgzipで圧縮して転送する仕組みがnginxでは簡単に実装できます。

/etc/nginx/nginx.conf
http {
    ...
    gzip  on; #動的圧縮を有効化
}
server {
    ...
    location ~* \.php$ { #locationは適宜変更

        ...
        #圧縮する対象のファイルをmime typeで指定。text/htmlは常に圧縮される
        gzip_types text/css text/javascript
                   application/x-javascript application/javascript
                   application/json;
        gzip_min_length 1k; #圧縮対象ファイルの最小サイズ指定
        gzip_disable "msie6"; #IE6では圧縮されたファイルの展開に失敗することがあるので、その場合は圧縮しない

        ...
    }
}

http/2

クライアントとのhttps通信を効率的に、より少ない通信量で行う手法です。http/2を使うためにはSSL対応が必須です。

/etc/nginx/nginx.conf
server {
    listen 443 ssl http2;
    ...

}

これだけです。

OCSP

https通信を行う際、クライアントはWebサーバから送られてきた証明書の妥当性を毎回、認証局へ確認しに行きます。この動作はセキュリティ的には必要なのですがオーバーヘッドが非常に大きいです。妥当性が確認された証明書を渡していること(証明書が失効していないこと)をWebサーバにキャッシュしておき、まとめてクライアントへ渡すことでオーバーヘッドを最小限に抑える仕組みがOCSPです。

/etc/nginx/nginx.conf
server {
    ...
    resolver 8.8.8.8; #OCSPサーバへ通信するためネームサーバを指定する

    ssl_stapling on; #OCSPを有効化
    ssl_stapling_verify on; #OCSPの問い合わせ結果が正しいものであることを検証する

    #自身の証明書を指定する。CA証明書と中間CA証明書が1ファイルになったものを指定する必要がある。
    #Let's Encryptを利用している場合はchain.pemを指定すればOK
    ssl_trusted_certificate /etc/letsencrypt/live/[your.domain]/chain.pem; 

}
16
20
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
16
20