Nginx no puede cargar archivos css

Recientemente decidí cambiar de Apache2 a Nginx. Instalé Nginx en mi servidor CentOS y configuré una configuración básica. Cuando traté de cargar mi sitio en el navegador (FF / Chrome) noté que el archivo css no está cargado. Revisé la consola de error y vi este mensaje:

Error: The stylesheet http://example.com/style.css was not loaded because its MIME type, "text/html", is not "text/css".

Revisé la configuración de Nginx y todo parece estar bien:

 http { include /etc/nginx/mime.types; .......... } 

El tipo de mime para archivos css está configurado correctamente en /etc/nginx/mime.types.

text/css css;

Todo parece estar bien configurado, pero mis archivos css aún no están cargados. No tengo ninguna explicación.

Otra cosa que vale la pena mencionar. Inicialmente instalé Nginx usando repositorys epel y obtuve una versión anterior: 0.8 … Me pareció que mi problema era un error en esa versión, así que desinstalé la versión 0.8, añadí el repository nginx a yum y luego instalé la última versión: 1.0. 14. Pensé que la nueva versión resolvería mi problema, pero desafortunadamente no, así que me estoy quedando sin ideas.

Agradezco cualquier ayuda.

Archivos de configuración:

/etc/nginx/nginx.conf

 user nginx; worker_processes 1; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; keepalive_timeout 65; #gzip on; include /etc/nginx/conf.d/*.conf; } 

/etc/nginx/conf.d/default.conf

 server { listen 80; server_name localhost; #charset koi8-r; #access_log /var/log/nginx/log/host.access.log main; location / { root /usr/share/nginx/html; index index.html index.htm index.php; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html$fastcgi_script_name; include fastcgi_params; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location ~ \.php$ { # proxy_pass http://127.0.0.1; #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # #location ~ \.php$ { # root html; # fastcgi_pass 127.0.0.1:9000; # fastcgi_index index.php; # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; # include fastcgi_params; #} # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #location ~ /\.ht { # deny all; #} } 

/etc/nginx/mime.types

 types { text/html html htm shtml; text/css css; text/xml xml; image/gif gif; image/jpeg jpeg jpg; application/x-javascript js; application/atom+xml atom; application/rss+xml rss; .......................................... other types here .......................................... } 

Poniendo el include /etc/nginx/mime.types; en location / { lugar de en http { resolví el problema para mí.

Encontré una solución en la web. Agregué a /etc/nginx/conf.d/default.conf lo siguiente:

 location ~ \.css { add_header Content-Type text/css; } location ~ \.js { add_header Content-Type application/x-javascript; } 

El problema ahora es que una solicitud a mi archivo css no se redirige bien, como si la raíz no estuviera configurada correctamente. En error.log veo

2012/04/11 14:01:23 [error] 7260 # 0: * 2 open () “/etc/nginx//html/style.css”

Entonces, como segunda solución, agregué la raíz a cada ubicación definida. Ahora funciona, pero parece un poco redundante. ¿No se hereda raíz de / ubicación?

style.css realidad se está procesando a través de fastcgi debido a su directiva de “ubicación /”. Entonces fastcgi es el que sirve el archivo ( nginx > fastcgi > filesystem ), y no el sistema de archivos directamente ( nginx > filesystem ).

Por una razón que todavía tengo que descubrir (estoy seguro de que hay una directiva en algún lugar), NGINX aplica el tipo de letra mime text/html a todo lo que se atiende desde fastcgi, a menos que la aplicación backend explícitamente indique lo contrario.

El culpable es este bloque de configuración específicamente:

 location / { root /usr/share/nginx/html; index index.html index.htm index.php; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html$fastcgi_script_name; include fastcgi_params; } 

Debería ser:

 location ~ \.php$ { # this line root /usr/share/nginx/html; index index.html index.htm index.php; fastcgi_split_path_info ^(.+\.php)(/.+)$; #this line fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; # update this too include fastcgi_params; } 

Este cambio asegura que solo se soliciten archivos *.php desde fastcgi. En este punto, NGINX aplicará el tipo MIME correcto. Si tiene alguna reescritura de URL, debe manejar esto antes de la directiva de ubicación ( location ~\.php$ ) para que la extensión correcta se derive y se enrute correctamente a fastcgi.

Asegúrese de consultar este artículo sobre consideraciones de seguridad adicionales con try_files . Dadas las implicaciones de seguridad, considero que esto es una característica y no un error.

Me encontré con este problema también. Me confundió hasta que me di cuenta de lo que estaba mal:

Tu tienes esto:

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

Tu quieres esto:

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

parece haber un error en nginx o una deficiencia en los documentos (este podría ser el comportamiento previsto, pero es extraño)

Seguí algunos consejos del rest de las respuestas y descubrí que estas acciones raras me ayudaron (al menos en mi caso).

1) Agregué al bloque del servidor lo siguiente:

 location ~ \.css { add_header Content-Type text/css; } 

Recargué nginx y obtuve esto en error.log:

18/06/18 18:32:29 [error] 3430 # 3430: * 169 open () “/etc/nginx/html/css/mysite.css” ha fallado (2: No hay tal archivo o directorio)

2) Eliminé las filas, recargué nginx y obtuve css de trabajo. No puedo explicar lo que sucedió porque mi archivo conf llegó a ser como antes.

Mi caso estaba limpio xubuntu 14.04 en VirtualBox, nginx / 1.9.2, una fila 127.51.1.1 mysite en / etc / hosts y bastante simple /etc/nginx/nginx.conf con un bloque de servidor:

 user nginx; worker_processes 1; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; server { listen 80; server_name mysite; location / { root /home/testuser/dev/mysite/; } } } 

Tuve el mismo problema en Windows. Lo resolví agregando: include mime.types; en http { en mi archivo nginx.conf. Entonces todavía no funcionó … así que miré el archivo error.log y noté que intentaba cargar los archivos .css y javascript desde la ruta del archivo pero con una carpeta / http entre ellos. Ejemplo: mi .css estaba en: “C: \ Users \ pc \ Documents \ nginx-server / player-web / css / index.css” y lo tomaba de: “C: \ Users \ pc \ Documents \ nginx” -server / html /player-web/css/index.css “Así que cambié mi carpeta de jugador-web dentro de una carpeta html y funcionó;)

De hecho, me tomé mi tiempo revisé todas las respuestas anteriores en esta página, pero fue en vano. Simplemente cambié el propietario y los permisos de directorio y subdirectorios con el siguiente comando. Cambié el propietario del directorio del proyecto web en /usr/share/nginx/html al usuario root usando:

chown root /usr/share/nginx/html/mywebprojectdir/*

Y finalmente cambió los permisos de ese directorio y subdirectorios usando:

chmod 755 /usr/share/nginx/html/mywebprojectdir/*

NOTA : si se niega, puede usar sudo

agregar esto a su archivo ngnix conf

 add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval' https://ssl.google-analytics.com https://assets.zendesk.com https://connect.facebook.net; img-src 'self' https://ssl.google-analytics.com https://s-static.ak.facebook.com https://assets.zendesk.com; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com https://assets.zendesk.com; font-src 'self' https://themes.googleusercontent.com; frame-src https://assets.zendesk.com https://www.facebook.com https://s-static.ak.facebook.com https://tautt.zendesk.com; object-src 'none'";