Nginx的加载失败css文件Nginx的加载失败css文件(Nginx fails to load

2019-05-13 12:01发布

我最近决定从Apache2的切换到Nginx的。 我在我的CentOS的服务器,并设置一个基本配置上安装Nginx的。 当我试图加载我的网站在浏览器(FF /铬),我注意到css文件未加载。 我检查了错误控制台,看到这条消息:

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

我检查了Nginx的配置,一切似乎是罚款:

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

对CSS文件的MIME类型/etc/nginx/mime.types设置是否正确。

text/css css;

似乎一切都配置好,但仍然没有加载我的CSS文件。 我没有解释。

还有一件事值得一提。 起初我安装Nginx的使用EPEL存储库和我得到了一个旧版本:0.8 ...这,我似乎觉得我的问题是在该版本中的错误,所以我卸载了0.8版本,增加nginx的仓库百胜,然后安装最新版本:1.0。 14。 我认为新版本将解决我的问题,但遗憾的是它并没有,所以我运行的想法。

我感谢所有帮助。

配置文件:

/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
    ..........................................
}

Answer 1:

include /etc/nginx/mime.types;location / {而不是在http {解决这个问题对我来说。



Answer 2:

我在网上找到了一个解决方法。 我加入/etc/nginx/conf.d/default.conf如下:

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

现在的问题是,我的CSS文件的请求不重定向很好,好像根本没有正确设置。 在error.log中我看到

2012/04/11 14时01分23秒[错误] 7260#0:* 2打开() “/etc/nginx//html/style.css”

因此,作为一个第二个解决方法我添加根到每个定义的位置。 现在,它的工作原理,但似乎有点多余。 是不是从根/位置遗传吗?



Answer 3:

style.css实际上是通过FastCGI的过程中,由于你的“位置/”指令。 因此,它是FastCGI的是服务于该文件( nginx > fastcgi > filesystem ),而不是文件系统直接( nginx > filesystem )。

对于原因,我还没有搞清楚(我敢肯定有一个地方的指令),NGINX应用MIME类型text/html任何东西从FastCGI的被服务,除非后端应用程序明确地说,否则。

罪魁祸首是这种构造块具体为:

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;
}

它应该是:

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;
}

这种变化可以确保只有*.php文件从FastCGI的请求。 在这一点上,NGINX将应用正确的MIME类型。 如果您有任何URL重写发生的事情,你必须在位置指令之前处理这个( location ~\.php$ ),以便正确的扩展推导并正确路由到FastCGI的。

一定要看看这篇文章关于使用其他安全方面的考虑try_files 。 考虑到安全性问题,我认为这是一个功能,而不是一个错误。



Answer 4:

我就遇到了这个问题了。 这让我感到困惑,直到我意识到什么是错的:

你有这样的:

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

你要这个:

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

似乎无论是在nginx的错误,还是一个在文档中的缺陷(这可能是预期的行为,但它是奇)



Answer 5:

我跟着从剩下的答案的一些技巧和发现这些奇怪的行动帮助(至少在我的情况)。

1)I加入到服务器块以下内容:

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

我nginx的装载,并在error.log中得到这个:

2015年6月18日11时32分29秒[错误] 3430#3430:* 169的open() “/etc/nginx/html/css/mysite.css” 失败(2:没有这样的文件或目录)

2)我删除的行,重装上阵nginx的和得到工作的CSS。 我无法解释发生了什么,因为我的conf文件变得如前。

我的情况是干净的Xubuntu 14.04 VirtualBox上,nginx的/ 1.9.2,行127.51.1.1 mysite在/ etc / hosts和非常简单/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;

    server {
        listen 80;
        server_name mysite;

        location / {
            root /home/testuser/dev/mysite/;
        }
    }
}


Answer 6:

我在Windows中有同样的问题。 我解决了它加入: 包括的mime.types;HTTP{在我的nginx.conf文件。 然后,它仍然没有工作..所以我看了一下error.log文件,我注意到,这是试图给的CSS和JavaScript文件从收费的文件路径,但与/ HTTP之间的文件夹中。 例如:我的CSS是: “C:\用户\ PC \文档\ nginx的服务器/播放器的Web / CSS / index.css”,它是从把它:“C:\用户\ PC \文档\ nginx的-server / HTML /player-web/css/index.css”所以我改变了我的播放器的Web文件夹中的HTML文件夹内,它的工作;)



Answer 7:

其实,我把我的时间通过这个网页上,但无济于事上述所有的答案去了。 我刚好更改所有者和目录,并使用以下command.I子目录的权限改变了Web项目目录的所有者/usr/share/nginx/htmlroot使用用户:

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

终于改变了目录,并使用分目录的权限:

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

注意 :如果被拒绝,你可以使用sudo



Answer 8:

我有同样的问题,并没有什么不同以上的为我做了什么工作是具有高于其他任何位置的块我的位置的PHP。

location ~ [^/]\.php(/|$) {
fastcgi_split_path_info  ^(.+\.php)(/.+)$;
fastcgi_index            index.php;
fastcgi_pass             unix:/var/run/php/php7.3-fpm.sock;
include                  fastcgi_params;
fastcgi_param   PATH_INFO       $fastcgi_path_info;
fastcgi_param   SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
** The below is specifically for moodle **
location /dataroot/ {
internal;
alias <full_moodledata_path>; # ensure the path ends with /
}


Answer 9:

你应该完全刷新你的浏览器的网站例如,使用Ctrl + F5刷新,以避免让不正确的头缓存文件。



Answer 10:

添加到您的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'";


文章来源: Nginx fails to load css files
标签: css nginx mime