🏍

Nginxでsvgz画像が表示されない

2022/02/12に公開

背景

Nginx + Laravel環境で開発していたところ、いくつかの画像がリンク切れを起こす。
調べてみると拡張子が.svgzの画像のみリンク切れを起こしている。

画像リンクを別タブで開くとどうやらエンコードがうまく行っていない様子。

This page contains the following errors:
error on line 1 at column 1: Encoding error
Below is a rendering of the page up to the first error.

解決策

.confに以下の設定を追加

default.conf
    location ~ \.svgz$ {
        add_header Content-Encoding gzip;
    }

.svgz.svgをgzipで圧縮した形式で、ブラウザがデコードできるようヘッダーにエンコード形式を付与する必要がある。

補足

Nginxのlocationディレクティブはprefix(上記では~の部分)に応じてlocationの優先順位が変わるため、複数のlocationディレクティブが存在し、狙ったヘッダーが付与されない場合は評価順を見直して見ると良いかもしれない。

参考

https://developer.mozilla.org/ja/docs/Web/HTTP/Headers/Content-Encoding
http://nginx.org/en/docs/http/ngx_http_core_module.html#location

GitHubで編集を提案

Discussion