Nginx – WordPress-Blog auf Rails lädt Stile und Skripte mit dem Mime-Typ text/html

Lesezeit: 4 Minuten

Ich habe gerade einen WordPress-Blog unter einem /blog-Verzeichnis innerhalb einer Rails-App installiert, die auf Unicorn und Nginx läuft, und meine Stylesheets und Skripte werden nicht richtig im Browser geladen, wenn ich zu meinen domain.com/blog-Seiten gehe. Die Chrome-Konsole gibt mir den folgenden Fehler:

  • Ressource als Stylesheet interpretiert, aber mit MIME-Typ text/html übertragen
  • Ressource wird als Skript interpretiert, aber mit dem MIME-Typ text/html übertragen

Ich habe versucht, dies herauszufinden und viele Lösungen hier auf SO ausprobiert, komme aber immer noch nicht durch … scheint, als müsste etwas an meiner Nginx-Konfiguration geändert werden, insbesondere für den Blog/PHP-Speicherort. Hier ist meine Konfig:

upstream unicorn {
  server unix:/tmp/unicorn.domain.sock fail_timeout=0;
}

server {
  server_name www.domain.com;
  return 301 $scheme://domain.com$request_uri;
}

server {
  listen 80 default deferred;
  server_name domain.com;
  root /home/dcs/htdocs/domain/current/public;

  access_log /home/dcs/htdocs/domain/log/access.log;
  error_log  /home/dcs/htdocs/domain/log/error.log;


  location /blog {
    try_files $uri $uri/ /blog/index.php?$args;
  }

  location ~ \.php$ {
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass unix:/var/run/php-fpm.sock;

    fastcgi_index index.php;
    fastcgi_param  SCRIPT_FILENAME home/dcs/htdocs/domain/$fastcgi_script_name;
    include /etc/nginx/fastcgi_params;
  }


  location ^~ /assets/ {
    gzip_static on;
    expires max;
    add_header Cache-Control public;
  }

  try_files $uri/index.html $uri @unicorn;
  location @unicorn {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    proxy_pass http://unicorn;
  }

  error_page 500 502 503 504 /500.html;
  keepalive_timeout 10;
}

Nach langem Suchen bin ich endlich fündig geworden diese Lösung.

Anscheinend war das Problem, dass ich der App innerhalb von „location /blog“ einen Root hinzufügen und den „location ~ .php$“ innerhalb von /blog verschachteln musste. Hier ist meine Nginx-Konfiguration, die jetzt für einen WordPress-Blog in einer Rails-App mit Unicorn funktioniert, falls jemand anderes sie braucht:

upstream unicorn {
  server unix:/tmp/unicorn.domain.sock fail_timeout=0;
}

server {
  server_name www.domain.com;
  return 301 $scheme://domain.com$request_uri;
}

server {
  listen 80 default deferred;
  server_name domain.com;
  root /home/dcs/htdocs/domain/current/public;

  access_log /home/dcs/htdocs/domain/log/access.log;
  error_log  /home/dcs/htdocs/domain/log/error.log;

  location /blog {
    root /home/dcs/htdocs/domain;
    index index.php;

    location ~ \.php$ {
      fastcgi_split_path_info ^(.+\.php)(/.+)$;
      fastcgi_pass unix:/var/run/php-fpm.sock;

      fastcgi_index index.php;
      fastcgi_param  SCRIPT_FILENAME home/dcs/htdocs/domain/$fastcgi_script_name;
      include /etc/nginx/fastcgi_params;
    }
  }

  location ^~ /assets/ {
    gzip_static on;
    expires max;
    add_header Cache-Control public;
  }

  try_files $uri/index.html $uri @unicorn;
  location @unicorn {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    proxy_pass http://unicorn;
  }

  error_page 500 502 503 504 /500.html;
  keepalive_timeout 10;
}

Stellen Sie sicher, dass Sie eine haben types Direktive, die in Ihrer nginx-Konfiguration definiert ist.

Syntax:     types { ... }
Default:    

types {
    text/html  html;
    image/gif  gif;
    image/jpeg jpg;
}

Context:    http, server, location

Ordnet Dateinamenerweiterungen MIME-Antworttypen zu. Bei Erweiterungen wird die Groß- und Kleinschreibung nicht beachtet. Mehrere Erweiterungen können einem Typ zugeordnet werden, zum Beispiel:

types {
    text/css                     css;
    application/javascript       js;
    application/json             json;
}

Quelle: http://nginx.org/en/docs/http/ngx_http_core_module.html#types

  • Wenn Ihre Javascript- und CSS-Dateien außerhalb des /blog-Pfads gut geladen werden, würde ich vorschlagen, Ihre nginx-Konfigurationsdateien (sowohl primäre nginx.conf- als auch alle virtualhost-Dateien) nach „mime.types“ (ohne Anführungszeichen) zu durchsuchen. Sie sollten ein Include für diese Datei in der Konfiguration der obersten Ebene haben (dh: nginx.conf). Es klingt fast so, als würden die MIME-Typen irgendwie nur außerhalb von /blog bedingt geladen. Ich habe noch nie eine Konfiguration gesehen, die das von Ihnen beschriebene Problem verursacht. Ihr “location /blog” mit der Direktive try_files ist perfekt und sollte normalerweise statische Dateien bereitstellen.

    Benutzer2609094

    9. Mai 2015 um 1:58 Uhr

  • Vielen Dank für die Antworten – ich habe derzeit “include mime.types” in meiner nginx.conf und diese mime.types-Datei enthält die Typendirektive mit css/javascript/etc, die Sie erwähnt haben, Tan. Ich habe sogar versucht, “include /etc/nginx/mime.types” in diesem bestimmten vhost innerhalb der /blog- und /php-Speicherorte auszuführen, aber immer noch kein Glück …

    – Sayem Khan

    9. Mai 2015 um 23:05 Uhr


  • Nate – Ja, meine Styles und Skripte werden alle ordnungsgemäß außerhalb von „location/blog“ geladen, aber alle Seiten in diesem WordPress-Blog laufen aus irgendeinem Grund immer wieder auf diesen Mime-Type-Fehler.

    – Sayem Khan

    9. Mai 2015 um 23:29 Uhr

1393850cookie-checkNginx – WordPress-Blog auf Rails lädt Stile und Skripte mit dem Mime-Typ text/html

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy