概要
テニスプレイヤーがLaravelでWebサービス作ってみたの個別記事です。
Let's Encryptでhttps通信を実現した後、httpsのオーバーヘッドをできるだけ少なくして、画面表示までの時間を短くしたときに使ったnginx.confの設定を記載します。個々がどんな技術かは詳しく記載しません。
Webサーバ上でphp(Laravel)が動作する、リバースプロキシやロードバランサを経由させない構成を想定しています。
nginx + Let's Encryptの設定についてはさくらのナレッジがとってもわかりやすいです。
- gzip圧縮
- http/2
- OCSP
gzip圧縮
いきなりhttps関係ないですが、クライアントとサーバでファイルをやりとりする時に、対応するブラウザであればファイルをgzipで圧縮して転送する仕組みがnginxでは簡単に実装できます。
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対応が必須です。
server {
listen 443 ssl http2;
...
}
これだけです。
OCSP
https通信を行う際、クライアントはWebサーバから送られてきた証明書の妥当性を毎回、認証局へ確認しに行きます。この動作はセキュリティ的には必要なのですがオーバーヘッドが非常に大きいです。妥当性が確認された証明書を渡していること(証明書が失効していないこと)をWebサーバにキャッシュしておき、まとめてクライアントへ渡すことでオーバーヘッドを最小限に抑える仕組みがOCSPです。
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;
}