Nginx не удается загрузить файлы css
недавно я решил переключиться с Apache2 на Nginx. Я установил Nginx на своем сервере CentOS и настроил базовую конфигурацию. Когда я попытался загрузить свой сайт в браузере (FF/Chrome), я заметил, что файл 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;
..........
}
тип mime для файлов css задан правильно / etc/nginx / mime.типы.
text/css css;
все, кажется, хорошо настроено, но мои файлы css все еще не загружены. У меня нет объяснений.
еще одна вещь, о которой стоит упомянуть. Изначально я установил Nginx с помощью репозиториев epel и получил старую версию: 0.8... Мне показалось, что моя проблема была ошибкой в этой версии, поэтому я удалил версию 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 / по умолчанию.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 {
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
..........................................
}
8 ответов:
Я нашел решение в интернете. Я добавил в /etc/nginx / conf.d / по умолчанию.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 с / местоположения ?
style.css
фактически обрабатывается через fastcgi из-за вашей директивы" location/". Таким образом, это 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
. Учитывая последствия для безопасности, я считаю это особенностью, а не ошибкой.
Я тоже столкнулся с этой проблемой. Это смутило меня, пока я не понял, что было не так:
у вас есть это:
include /etc/nginx/mime.types; default_type application/octet-stream;
вы хотите это:
default_type application/octet-stream; include /etc/nginx/mime.types;
там, кажется, либо ошибка в nginx или недостаток в документах (это может быть предполагаемое поведение, но это странно)
я последовал некоторым советам из остальных ответов и обнаружил, что эти странные действия помогли (по крайней мере, в моем случае).
1) я добавил в блок Server следующее:
location ~ \.css { add_header Content-Type text/css; }
я перезагрузил nginx и получил это по ошибке.журнал:
2015/06/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, a row
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/; } } }
У меня была такая же проблема в Windows. Я решил его добавив:включить mime.типы; под http{ в моем nginx.файл conf. Тогда это все равно не сработало.. поэтому я посмотрел на ошибка.журнал файл, и я заметил, что он пытался зарядить .файлы css и javascript из пути к файлу, но с папкой / http между ними. Бывший: мой. css был в : "C:\Users\pc\Documents\nginx-server/player-web/css/index.стиль CSS" и он взял его от: "C:\Users\pc\Documents\nginx-server/ html / player-web / css / index.стиль CSS" Поэтому я изменил свою папку player-web внутри папки html, и это сработало;)
Я на самом деле не торопился, прошел через все вышеперечисленные ответы на этой странице, но безрезультатно. Я просто изменил владельца и разрешения каталога и подкаталогов, используя следующую команду.Я изменил владельца каталога веб-проекта в
/usr/share/nginx/html
доroot
пользователь с помощью:
chown root /usr/share/nginx/html/mywebprojectdir/*
и, наконец, изменил разрешения этого каталога и подкаталогов с помощью:
chmod 755 /usr/share/nginx/html/mywebprojectdir/*
Примечание: если отказано , вы можете использовать судо
добавьте это в свой файл 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'";