Acabo de instalar un blog de WordPress en un directorio /blog dentro de una aplicación de Rails, que se ejecuta en Unicorn y Nginx, y mis hojas de estilo y scripts no se cargan correctamente en el navegador cuando voy a las páginas de mi dominio.com/blog. La consola de Chrome me da el siguiente error:
- Recurso interpretado como Stylesheet pero transferido con tipo MIME text/html
- Recurso interpretado como Script pero transferido con tipo MIME text/html
He estado tratando de resolver esto y probé muchas soluciones aquí en SO, pero aún no puedo pasar … parece que algo debe cambiarse en mi configuración de Nginx, particularmente para la ubicación de blog/php. Aquí está mi configuración:
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;
}
Después de un montón de buscar, finalmente encontré esta solución.
Parece que el problema era que necesitaba agregar una raíz a la aplicación dentro de “ubicación/blog” y anidar la “ubicación ~ .php$” dentro de /blog. Aquí está mi configuración de Nginx que funciona ahora para un blog de WordPress en una aplicación Rails usando Unicorn, en caso de que alguien más lo necesite:
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;
}
Asegúrese de tener un types
directiva definida en su configuración de nginx.
Syntax: types { ... }
Default:
types {
text/html html;
image/gif gif;
image/jpeg jpg;
}
Context: http, server, location
Asigna extensiones de nombre de archivo a tipos de respuestas MIME. Las extensiones no distinguen entre mayúsculas y minúsculas. Se pueden asignar varias extensiones a un tipo, por ejemplo:
types {
text/css css;
application/javascript js;
application/json json;
}
Fuente: http://nginx.org/en/docs/http/ngx_http_core_module.html#types
-
Para expandir, si sus archivos javascript y css se cargan bien fuera de la ruta /blog, sugeriría buscar en sus archivos de configuración nginx (tanto nginx.conf primario como cualquier archivo virtualhost) “mime.types” (sin comillas). Debe tener una inclusión para este archivo en la configuración de nivel superior (es decir, nginx.conf). Casi parece que los tipos mime se cargan condicionalmente solo fuera de /blog. Nunca he visto una configuración que cause el problema que está detallando. Su “ubicación/blog” con la directiva try_files es perfecta, debería servir archivos estáticos normalmente.
– usuario2609094
9 de mayo de 2015 a las 1:58
-
Gracias por las respuestas. Actualmente tengo “include mime.types” en mi nginx.conf y ese archivo mime.types tiene la directiva de tipos con css/javascript/etc, que mencionaste, Tan. Incluso intenté hacer “incluir /etc/nginx/mime.types” en ese vhost en particular dentro de las ubicaciones /blog y /php, pero aún así no tuve suerte…
– Sayem Kan
9 mayo 2015 a las 23:05
-
Nate: sí, mis estilos y secuencias de comandos se están cargando correctamente fuera de “ubicación/blog”, pero todas las páginas de este blog de WordPress siguen teniendo este tipo de error MIME por alguna razón.
– Sayem Kan
9 mayo 2015 a las 23:29