我最近決定從Apache2轉到Nginx。我在CentOS服務器上安裝了Nginx,并進行了基本配置。 當我試圖在瀏覽器(FF/Chrome)中加載我的網站時,我注意到css文件沒有被加載。我檢查了錯誤控制臺,看到了這條消息:
錯誤:未加載樣式表http://example.com/style.css,因為其MIME類型“text/html”不是“text/css”。
我檢查了Nginx配置,一切似乎都很好:
http {
include /etc/nginx/mime.types;
..........
}
css文件的mime類型在/etc/nginx/mime.types中設置正確。
text/CSS CSS;
一切似乎都配置好了,但我的css文件仍然沒有加載。我無法解釋。
另一件值得一提的事。最初我使用epel庫安裝Nginx,我得到了一個舊版本:0.8...在我看來,我的問題是那個版本的一個bug,所以我卸載了0.8版本,將nginx庫添加到yum,然后安裝了最新版本: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
..........................................
}
放置include/etc/nginx/mime . types;在location / {下,而不是在http {下為我解決了這個問題。
我在網上找到了一個變通方法。我在/etc/nginx/conf.d/default.conf中添加了以下內容:
location ~ \.css {
add_header Content-Type text/css;
}
location ~ \.js {
add_header Content-Type application/x-javascript;
}
現在的問題是對我的css文件的請求沒有被很好地重定向,好像root沒有被正確設置。 在錯誤日志中我看到了
2012/04/11 14:01:23[錯誤]7260 # 0:* 2 open()"/etc/nginx//html/style . CSS "
因此,作為第二種解決方法,我將根目錄添加到每個定義的位置。 現在它工作了,但似乎有點多余。root不是繼承自/ location嗎?
由于您的“location /”指令,style.css實際上是通過fastcgi處理的。所以是fastcgi在提供文件(nginx & gtfastcgi & gt文件系統),而不是直接文件系統(nginx & gt文件系統)。
出于一個我還沒有弄清楚的原因(我確信在某個地方有一個指令),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;
}
這一改變確保只有*。fastcgi請求php文件。此時,NGINX將應用正確的MIME類型。如果您有任何URL重寫發生,您必須在location指令(location ~)之前處理它。php$)以便派生出正確的擴展并正確地路由到fastcgi。
請務必閱讀這篇關于使用try_files的其他安全性考慮的文章。考慮到安全隱患,我認為這是一個特性,而不是一個錯誤。
我也遇到了這個問題。這讓我很困惑,直到我意識到哪里出了問題:
你有這個:
include /etc/nginx/mime.types;
default_type application/octet-stream;
你想要這個:
default_type application/octet-stream;
include /etc/nginx/mime.types;
nginx中似乎有一個bug或者文檔中有一個缺陷(這可能是預期的行為,但是很奇怪)
我遵循了rest答案中的一些提示,發現這些奇怪的行為很有幫助(至少對我來說是這樣)。
1)我向服務器塊添加了以下內容:
location ~ \.css {
add_header Content-Type text/css;
}
我重新加載了nginx,得到了這個錯誤。日志:
2015/06/18 11:32:29[錯誤]3430 # 3430:* 169 open()"/etc/nginx/html/CSS/my site . CSS "失敗(2:沒有這樣的文件或目錄)
2)我刪除了行,重新加載nginx,得到了工作css。 我無法解釋發生了什么,因為我的conf文件變成了以前的樣子。
我的例子是VirtualBox上的clean xubuntu 14.04、nginx/1.9.2、/etc/hosts中的一行127.51.1.1 mysite和相當簡單的/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/;
}
}
}
在nginx.conf文件中,將mime.types添加到http主體中,如下所示:
http {
include /etc/nginx/mime.types;
include /etc/nginx/conf.d/*.conf;
}
現在轉到終端,運行以下命令來重新加載服務器:
sudo nginx -s reload
打開您的web瀏覽器并進行硬重新加載:右鍵單擊重新加載按鈕并選擇硬重新加載。在Chrome上你可以按Ctrl+Shift+R
我也面臨這個問題,我嘗試了很多解決方案,但沒有一個真正適合我
我是這樣解決的:
A.將域文檔根目錄(比如我的根目錄是/var/www/nginx-demo)的所有權授予nginx用戶(www-data)以避免任何權限問題:
sudo chown -R www-data: /var/www/nginx-demo
B.確認您的虛擬主機服務器塊符合這個標準(假設我使用localhost作為我的server_name,我的root作為/var/www/nginx-demo/website)
server {
listen 80;
listen [::]:80;
server_name localhost;
root /var/www/nginx-demo/website;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
C.測試Nginx配置的語法是否正確:
sudo nginx -t
如果配置語法中沒有錯誤,輸出將如下所示:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
D.重新啟動Nginx服務以使更改生效:
sudo systemctl restart nginx
E.使用鍵盤按鍵Ctrl + F5或Ctrl + Fn + F5,在瀏覽器中硬刷新您的網站,以避免緩存文件的標題不正確。
僅此而已。
我希望這有所幫助。
實際上,我花了很長時間在這一頁上瀏覽了以上所有的答案,但都無濟于事。我只是碰巧使用下面的命令更改了目錄和子目錄的所有者和權限。我使用以下命令將/usr/share/nginx/html中的web項目目錄的所有者更改為root用戶:
chown root/usr/share/nginx/html/myweb project dir/*
最后,使用以下命令更改了該目錄和子目錄的權限:
chmod 755/usr/share/nginx/html/mywebprojectdir/*
注意:如果被拒絕,您可以使用sudo
對我來說,這是安裝在網絡瀏覽器上的廣告攔截器。它不讓加載style.css
Debian 10.6上的Nginx 1.14.2也出現了同樣的問題。
它可以通過設置charset變量來解決。通過在server_name指令下的服務器塊中添加以下內容:
charset utf-8; # Use the appropriate charset in place of "utf-8"
我在Windows中也遇到了同樣的問題。 我添加了:include mime.types在我的nginx.conf文件中的http{下。 然后還是沒有效果..所以我查看了error.log文件,注意到它試圖對。css和javascript文件,但在它們之間有一個/http文件夾。例如: 我的。css在:& quotc:\ Users \ PC \ Documents \ nginx-server \ player-web \ CSS \ index . CSS & quot; 它是從:& quotc:\ Users \ PC \ Documents \ nginx-server * html * \ player-web \ CSS \ index . CSS & quot; 所以我把我的播放器網絡文件夾換成了html文件夾,它工作了;)
我也有同樣的問題,上面的問題對我來說沒有任何影響,我所做的是把我的位置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 /
}
經過幾個小時的努力,我的情況與這里的其他人不同。它是我用作資源的隱藏文件夾的路徑的一個文件夾中的一個點:
<link type = "text/css" href="../../.res/css/bootstrap.min.css" rel="stylesheet">
這導致了這些樣式不能在瀏覽器中呈現,盡管它們從nginx加載時沒有錯誤。只有Firefox(不是Chrome)抱怨css的MIME類型不是css而是文本。
我知道這很晚了,但是在搜索了互聯網上的解決方案之后,雖然所有的注意力都集中在配置上,實際上html本身也同樣重要
在配置端,在你定義了你的項目根之后,你應該指向你的統計數據,特別是css,比如像這樣——我的css在root/src中
location ~*/src/.css {
include /etc/nginx/mime.types;
add_header Content-type text/css;
}
在你的HTML中: 確保正確使用rel和類型
& ltlink rel = & quot樣式表& quothref = & quotsrc/style . CSS & quot;type = & quottext/CSS & quot;& gt
希望這能在將來幫助其他人
我必須加上星號才能讓它工作
location/* { include/usr/local/etc/nginx/mime . types;}
將此添加到您的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'";