2015-04-11 4 views
3

Я получаю следующие ошибки на моем сайте:Nginx не загружает файлы CSS и JS (ошибка типа MIME)?

Error: There are multiple templates named 'velvet'. Each template needs a unique name. 1b1a247fc034d5089f331ec9540138ff6afd5f39.js:75:306 
The stylesheet http://webmill.eu/css/bootstrap.min.css was not loaded because its MIME type, "text/html", is not "text/css". webmill.eu 
The stylesheet http://webmill.eu/css/font-awesome.min.css was not loaded because its MIME type, "text/html", is not "text/css". webmill.eu 
The stylesheet http://webmill.eu/css/velvet.css was not loaded because its MIME type, "text/html", is not "text/css". webmill.eu 
The stylesheet http://webmill.eu/css/custom.css was not loaded because its MIME type, "text/html", is not "text/css". 

После обширных исследований на 4 CSS стилей не суметь загрузить я последовал некоторые выводы и попытался исправить это путем внесения изменений в моем файле Nginx (/

etc/nginx/sites-available/webmill

) путем ввода "include /etc/nginx/mime.types;" под место/{:

# HTTP 
server { 
    listen 80 default_server; # if this is not a default server, remove "default_server" 
    listen [::]:80 default_server ipv6only=on; 

    root /usr/share/nginx/html; # root is irrelevant 
    index index.html index.htm; # this is also irrelevant 

    server_name webmill.eu; # the domain on which we want to host the application. Since we set "default_server" previously, nginx will answer all hosts anyway. 


    # If your application is not compatible with IE <= 10, this will redirect visitors to a page advising a browser update 
    # This works because IE 11 does not present itself as MSIE anymore 
     if ($http_user_agent ~ "MSIE") { 
     return 303 https://browser-update.org/update.html; 
    } 

    # pass all requests to Meteor 
    location/{ 
     proxy_pass http://127.0.0.1:8080; 
     proxy_http_version 1.1; 
     proxy_set_header Upgrade $http_upgrade; # allow websockets 
     proxy_set_header Connection $connection_upgrade; 
     proxy_set_header X-Forwarded-For $remote_addr; # preserve client IP 
     include  /etc/nginx/mime.types; 

     # this setting allows the browser to cache the application in a way compatible with Meteor 
     # on every applicaiton update the name of CSS and JS file is different, so they can be cache infinitely (here: 30 days) 
     # the root path (/) MUST NOT be cached 
     if ($uri != '/') { 
      expires 30d; 
     } 
    } 
} 

В /etc/nginx/mime.types файл был все правильно и правильно заехали в

/etc/nginx/nginx.conf

user www-data; 
worker_processes 4; 
pid /run/nginx.pid; 

events { 
     worker_connections 768; 
     # multi_accept on; 
} 

http { 

     ## 
     # Basic Settings 
     ## 

     sendfile on; 
     tcp_nopush on; 
     tcp_nodelay on; 
     keepalive_timeout 65; 
     types_hash_max_size 2048; 
     # server_tokens off; 

     # server_names_hash_bucket_size 64; 
     # server_name_in_redirect off; 

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

     ## 
     # Logging Settings 
     ## 

     access_log /var/log/nginx/access.log; 
     error_log /var/log/nginx/error.log; 

     ## 
     # Gzip Settings 
     ## 

     gzip on; 
     gzip_disable "msie6"; 

     # gzip_vary on; 
     # gzip_proxied any; 
     # gzip_comp_level 6; 
     # gzip_buffers 16 8k; 
     # gzip_http_version 1.1; 
     # gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript; 

     ## 
     # nginx-naxsi config ## 
     # Uncomment it if you installed nginx-naxsi 
     ## 

     #include /etc/nginx/naxsi_core.rules; 

     ## 
     # nginx-passenger config 
     ## 
     # Uncomment it if you installed nginx-passenger 
     ## 

     #passenger_root /usr; 
     #passenger_ruby /usr/bin/ruby; 

     ## 
     # Virtual Host Configs 
     ## 

     include /etc/nginx/conf.d/*.conf; 
     include /etc/nginx/sites-enabled/*; 
} 

я должен делать что-то неправильно, потому что все еще не работает. Должен ли я также включать «root/usr/share/nginx/html;» в местоположение раздел /etc/nginx/sites-available/webmill?

Любые предложения приветствуются и заблаговременно за помощь!

+0

являются файлы css/js прокси? или у них есть http доступный путь? –

+0

спасибо за ваш интерес! нет, они не проксированы и не имеют доступного пути htt от того, что я могу видеть (первая запись из/etc/nginx/sites-available/webmill), если я не ищу место в неправильном месте ... Я не эксперт в этом –

+0

видит, почему я спрашиваю, вы говорите, что «root не имеет значения», хотя вы можете это сделать, если вы измените этот корень на путь, в котором существуют активы, nginx может обслуживать их напрямую (с правильными заголовками, но вам нужно небольшое изменение в конфигурации), не спрашивая сервер webmill об этом. –

ответ

3

Попробуйте добавить это к вашему /etc/nginx/conf.d/default.conf

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

это сработало для меня, но, похоже, это не обязательно. нет ли более общего подхода? – arod

0

я вышел из очевидных деталей из конфигурации, чтобы уменьшить дублирование, это только основа, и вы будете вам нужно добавить другую конфигурацию из вашей конфигурации, например, прослушать и часть кэширования.

server { 
    server_name webmill.eu; 
    location @proxy { 
    proxy_pass   http://127.0.0.1:8080; 
    proxy_http_version 1.1; 
    proxy_set_header Upgrade $http_upgrade; # allow websockets 
    proxy_set_header Connection $connection_upgrade; 
    proxy_set_header X-Forwarded-For $remote_addr; # preserve client IP 
    include    /etc/nginx/mime.types; 
    } 
    location /css { 
    root /home/ines/development/webmill/app/client/css; 
    # try finding the file first, if it's not found we fall 
    # back to the meteor app 
    try_files $uri @proxy; 
    } 
    location /js { 
    root /home/ines/development/webmill/app/client/js; 
    # try finding the file first, if it's not found we fall 
    # back to the meteor app 
    try_files $uri @proxy; 
    } 
    location/{ 
    # I know first condition will always fail but i can't do 
    # try files with only 1 option; 
    try_files $uri @proxy; 
    } 
} 
+0

Большое спасибо за это! Я сделал изменения, но пока не взломал его. в настоящее время получает 500 внутренних ошибок сервера, на которые указывает журнал ошибок '2015/04/14 08:46:06 [ошибка] 20225 # 0: * 31868 не удалось найти именованное местоположение« @proxy », клиент: 81.164.141.218, сервер : webmill.eu, request: «GET/HTTP/1.1», хост: «webmill.eu» ' –

+0

Отсутствует скобка, я исправлю ее –

+0

Спасибо! любая идея, где отсутствует эта скобка? –

0

Ну, в конце концов неудачных попыток, я уже удалось решить эту проблему путем удаления тип ссылки = «текст/CSS» из моего кода, и оставить CSS, как это:

<link rel="stylesheet" href="/css/style.css" />