我有一个使用nginx / 1.2.6(Ubuntu 13.04 VirtualBox)运行的Symfony2.2.1项目。 通过硬链接可以渲染资产。
使用符号链接,它仅适用于第一次初始化。 当我更新符号链接源时,浏览器渲染会使用 字符转换我的修改。浏览器没有错误,没有修改的部分不会受到影响。
修改后我的CSS文件结束的示例:
[...]
div.form-actions {
text-align: center;
}
�����
目前,我使用硬链接。我对Apache2没有这个问题......:/
你有个主意吗? 感谢
Nginx网站conf:
server {
listen 80;
root /media/sf_NetBeansProjects/XXXX/web;
index app.php;
server_name XXXX.lo;
location / {
# try to serve file directly, fallback to rewrite
try_files $uri @rewriteapp;
}
location @rewriteapp {
# rewrite all to app.php
rewrite ^(.*)$ /app.php/$1 last;
}
location ~ ^/(app|app_dev)\.php(/|$) {
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param HTTPS off;
}
error_log /media/sf_NetBeansProjects/XXXX/app/logs/nginx_errors.log;
access_log /media/sf_NetBeansProjects/XXXX/app/logs/nginx_access.log;
}
微妙的是media / sf_NetBeansProjects是我的Windows8的VirtualBox共享文件夹,但正如我之前所说,apache2总是可以的。
答案 0 :(得分:2)
创建符号链接后尝试重启php5-fpm。
sudo service php5-fpm reload
并检查disable_symlinks选项http://nginx.org/en/docs/http/ngx_http_core_module.html#disable_symlinks
答案 1 :(得分:1)
好吧,我想到了一件事,也许你正在查看图像文件的二进制数据,所以也许浏览器没有将其识别为图像文件,可能是因为nginx没有发送{ {1}},可能是另一个原因。但我有一个建议,请将其添加到您的默认content-type
location /
或者,您可以在服务器块内部location / {
try_files ..... ;
types {
image/jpeg jpg jpeg;
}
}
include mime.types
我不确定这是否有效,但值得一试。
答案 2 :(得分:1)
这篇文章帮助:
https://coderwall.com/p/ztskha
“简单地说,sendfile()使用内核调用将文件直接从光盘复制到tcp。如果使用远程文件系统(如nfs或VirtualBox Guest Additions的东西),这种方法不可靠。”
基本上,如果您尝试在主机上存在的来宾VM上提供文件,请关闭NGINX的sendfile。
“要在Apache中关闭sendfile(),可以使用EnableSendfile off指令,让nginx使用sendfile off。”
答案 3 :(得分:0)
尝试清除浏览器缓存有时nginx将文件视为原始文件而不使用mime-type设置。 另外,尝试更改HttpHeaders将每个文件的到期时间和缓存控制设置为最小,这取决于您的项目是否仍在开发中。因此,服务器正在推送的文件始终会更新,并且不会被浏览器缓存。
答案 4 :(得分:-1)
我遇到了同样的问题,使用相同的设置。
您需要从Nginx禁用sendfile才能在符号链接下正确发送此静态文件。
location / {
sendfile off; # Do it before try files
# try to serve file directly, fallback to rewrite
try_files $uri @rewriteapp;
}