И снова - NGINX сегодня задает мне много вопросов :)
Как всегда, я уже пробовал какое-то время, но, похоже, не могу решить эту проблему:
Я только что настроил NGINX для обработки моих файлов .css, равных моим файлам .php (для анализа тегов PHP внутри файла CSS). Это отлично работает, файл найден и доставлен.
Я мог отлаживать его с помощью FIrebug, и все в порядке (он отображает содержимое .css внутри открытого <link>
тег). Итак, все работает, да? Неправильно.
У него есть CSS, но он не интерпретирует его! Что я имею в виду: очевидно, тип файла CSS (или тип приложения, что угодно) неправильный. Страница может получить доступ к CSS, но совершенно не беспокоит его использование.
Что проверял / пробовал:
body {background-color: #000; }
Вот конфигурация:
server {
listen 80;
server_name localhost;
access_log /var/log/nginx/board.access_log;
error_log /var/log/nginx/board.error_log warn;
root /var/www/board/public;
index index.php;
fastcgi_index index.php;
location / {
try_files $uri $uri /index.php;
}
location ~ (\.php|\.css)$ {
try_files $uri =404;
include /etc/nginx/fastcgi_params;
#keepalive_timeout 0;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass 127.0.0.1:7777;
}
}
Заголовок ответа Firebug «Сеть»:
Connection keep-alive
Content-Encoding gzip
Content-Type text/html
Date Sat, 16 Jun 2012 10:08:40 GMT
Server nginx/1.0.5
Transfer-Encoding chunked
X-Powered-By PHP/5.3.6-13ubuntu3.7
Думаю, я только что ответил на свой вопрос. Является ли проблема Content-Type text / html проблемой? Как я могу это удалить?
Я лично предполагаю, что мне нужно как-то это использовать
include /etc/nginx/mime.types;
default_type application/octet-stream;
Но я не уверен ... кто-нибудь знает, как это решить?
TL; DR; CSS-файл доставляется правильно, но, похоже, он не «используется» в качестве CSS из браузера. (Протестировано, работает на apache)
Вы можете попробовать добавить
<?php
header('Content-Type: text/css');
?>
(необязательно с кодировкой) в ваш файл css, проанализированный php. Это должно произойти как первая инструкция (точнее: до того, как произойдет какой-либо вывод; php выдает ошибку, если какой-либо вывод произошел до вызова header()
) и перед ним не должно быть пробелов.
Это отправит HTTP-заголовок, указанный вместе с контентом, который должен делать именно то, что вы хотите.
Вы можете установить правильный заголовок через PHP header()
функцию или через nginx add_header
вариант конфигурации.
Как уже упоминал Йонас Велички, используя PHP, вы устанавливаете правильный заголовок, добавляя
<?php header("Content-Type: text/css"); ?>
в свой файл перед отправкой любого вывода.
Другой способ - добавить опция конфигурации add_header в соответствующий раздел вашей конфигурации nginx, в вашем случае:
add_header Content-Type text/css;