今天 NGINX 又给我提了很多问题 :)
像往常一样,我已经尝试了一段时间,但似乎无法解决这个问题:
我刚刚将 NGINX 配置为处理与 .php 文件相同的 .css 文件(以解析 CSS 文件中的 PHP 标签)。这非常有效,文件被找到并传送。
我可以使用 FIrebug 进行调试,一切正常(它显示打开的标签内的 .css 内容<link>
)。所以,一切正常,对吗?错了。
它有 CSS,但它不解释它!我的意思是:显然,CSS 的文件类型(或应用程序类型,无论什么)是错误的。页面可以访问 CSS,但根本不会真正使用它。
我检查/尝试过的内容:
- .css 文件中没有 PHP 错误,因此该错误不成立
- .css 是可访问的。我可以手动调用 URI,或者检查包含的 URL 是否找到它:两者都有效
- .css 没有语法错误(我切换到了只有
body {background-color: #000; }
- 无需 NGINX 即可工作
- 我删除了浏览器缓存/在配置重写后重新启动了 NGINX
这里是配置:
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;
但我不确定...有人知道如何解决这个问题吗?
TLDR;CSS 文件已正确交付,但它似乎没有被浏览器“用作”CSS。(已测试,适用于 Apache)
答案1
您可以尝试添加
<?php
header('Content-Type: text/css');
?>
(可选编码)到您的 php 解析的 css 文件中。这必须作为第一条指令发生(更准确:在任何输出发生之前;如果在调用之前发生任何输出,php 将对您出错header()
),且其前面不能有任何空格。
这将把给定的 HTTP 标头与内容一起发送,该内容应该正是您想要的。
答案2
header()
您可以通过 PHP 的函数或 nginx 的add_header
配置选项设置正确的标头。
正如 Jonas Wielicki 已经提到的,使用 PHP,您可以通过添加来设置正确的标头
<?php header("Content-Type: text/css"); ?>
在发送任何输出之前,将其保存到您的文件中。
另一种方法是添加add_header 配置选项到你的 nginx 配置的相应部分,在你的例子中:
add_header Content-Type text/css;