Назад | Перейти на главную страницу

nginx, вероятно, предоставляет неправильный тип файла для файла .css с тегами php

И снова - NGINX сегодня задает мне много вопросов :)

Как всегда, я уже пробовал какое-то время, но, похоже, не могу решить эту проблему:

Я только что настроил NGINX для обработки моих файлов .css, равных моим файлам .php (для анализа тегов PHP внутри файла CSS). Это отлично работает, файл найден и доставлен.

Я мог отлаживать его с помощью FIrebug, и все в порядке (он отображает содержимое .css внутри открытого <link> тег). Итак, все работает, да? Неправильно.

У него есть CSS, но он не интерпретирует его! Что я имею в виду: очевидно, тип файла CSS (или тип приложения, что угодно) неправильный. Страница может получить доступ к CSS, но совершенно не беспокоит его использование.

Что проверял / пробовал:

Вот конфигурация:

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;