19
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

CSSファイル(等)が読み込まれているのに反映されない!!(Resource interpreted as Stylesheet but transferred with MIME type text/plain)

Posted at

タイトルのような症状に陥ったのですが、「CSS 読み込まれる 反映されない」みたいなワードでググっても情報が出てこなかったので記録しておきます。

症状

個人で運営しているサービスのインフラ周りを全とっかえする作業中に発生しました。
環境は、Rails+Nginx on GKEといった感じです。

2020-02-18.png

図のようにCSSがまったく当たっておらず、最初はサーバーの設定ミスでアセットファイルが提供されていないのかと思いましたが、よく見るとアセットは全て200 OKで読み込まれています。

2020-02-18 (2).png
(inkscapeで描いているのがバレてしまう...)

更にJPGPNGといった一部画像のみは正常に表示されており、CSSSVGJSは表示されない/反映されないというおかしな現象です。

原因と解決策

上の画像のTypeのところをよく見るとわかるのですが、titlelogoというsvgファイルのTypeがtext/plainになっていました。
2020-02-18.png
このType(MIME Type)が一致していないと、たとえデータが完全でも正常に表示されないようです。(はじめて知った)

よく見たらConsoleにもResource interpreted as Stylesheet but transferred with MIME type text/plainという警告が出ていました。(ErrorじゃなくWarningなのでなかなか気づきにくい)

2020-02-18 (3).png

何故いきなりこのような症状が出たのかといえば、インフラ周りを全とっかえする際にnginx.confを作り直したことが原因でした。MIME Typeを拡張子から判別するための以下の2行を付け忘れていたのです。

/etc/nginx/nginx.conf
include mime.types;
default_type application/octet-stream;

1行目はnginx.confと同階層にある、拡張子とMIME Typeのペアを羅列しているmime.typesを読み込むコードです。
2行目はmime.typesに記載のないデータを「不明なバイナリデータ」を意味するapplication/octet-streamとして扱うためのコードです。(これを付ければブラウザがある程度よしなに扱ってくれる?未検証)

というわけで、無事にCSSやらSVGが表示されるようになりました。

2020-02-18 (6).png

めでたしめでたし

今回使ったnginx.conf全文

ついでに今回正常に表示されたnginx.conf全文を載せておきます。

前提は以下のとおりです。

  • Railsのpublic//var/www/static_files/にmountしてある
  • Railsコンテナは同一Pod上の3000ポートで起動している
  • SSL通信に関してはIngress上で解決している
/etc/nginx/nginx.conf
events {
  worker_connections  1024;
}

http{
  charset UTF-8;
  server_tokens off;

  sendfile            on;
  tcp_nopush          on;
  tcp_nodelay         on;
  keepalive_timeout   65;
  types_hash_max_size 2048;

  include mime.types;
  default_type application/octet-stream;

  server{
    listen 80;
      
    # Rooting for /public
    location / {
      root /var/www/static_files;
      try_files $uri @rails;
    }

    # Rooting for rails
    location @rails {
      proxy_pass http://localhost:3000;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;
    }
  }
}
19
8
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
19
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?