2013-05-10 62 views
3

我有一个使用nginx/1.2.6(Ubuntu 13.04 VirtualBox)运行的Symfony2.2.1项目。 硬链接的资产呈现方式正常。使用nginx更新符号链接静态文件无效

使用符号链接,它仅适用于第一次初始化。 当我更新一个符号链接源时,浏览器渲染使用 字符转换我的修改。浏览器没有错误,未经修改的部分不受影响。我的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; 
} 

的精妙之处是,媒体/ sf_NetBeansProjects是我的Windows8 VirtualBox中共享文件夹,但正如我前面说的,Apache2的总是好这一点。

+0

我用相当多的你可以粘贴你的nginx站点配置的相关位? – 2013-05-10 12:03:33

+0

是的,我完成了.tks。 – webda2l 2013-05-10 12:17:58

+0

通过更新符号链接,你的意思是用编辑后的图片覆盖它。 – 2013-05-18 07:59:47

回答

1

这篇文章帮助:

https://coderwall.com/p/ztskha

“简单地说,的sendfile()使用内核调用直接从光盘为tcp复制文件如果正在使用远程文件系统(如NFS或VirtualBox的客户添置。东西),这种方法是不可靠的。“

实质上,如果您尝试在主机上存在的访客虚拟机上提供文件,请关闭NGINX的sendfile。

“要在Apache中关闭sendfile(),可以使用EnableSendfile off指令,对于nginx使用sendfile off。“

+0

虽然这个链接可能回答这个问题,但最好在这里包含答案的基本部分,并提供供参考的链接。如果链接页面更改,则仅链接答案可能会失效。 – 2013-11-19 01:53:09

1

好吧,有一件事情出现在我的脑海里,也许你正在查看图像文件的二进制数据,所以也许浏览器不能识别这是一个图像文件,也许是因为nginx没有发送content-type,可能是另一个原因。但我有一个建议,在默认location /

location/{ 
    try_files ..... ; 
    types { 
     image/jpeg jpg jpeg; 
    } 
} 

或者添加这个,你可以include mime.types服务器块

server { 
    #bla bla bla 
    include mime.types; 
    location/{ 
     #bla bla 
    } 
} 

里面我不知道这是否会工作或没有,但它是值得一试。

+0

没有任何效果。 – webda2l 2013-05-20 21:05:54

0

尝试清除浏览器缓存有时nginx的扔文件为原料跟没有MIME类型集。 另请尝试更改HttpHeaders将每个文件的过期时间和缓存控制设置为最小值,这取决于您的项目是否仍在开发中。以便服务器推送的文件始终更新并且不会被浏览器缓存。

+0

我已经添加了哑参数?a = 123456强制重载没有成功 – webda2l 2013-05-21 09:52:47

-1

我有同样的问题,使用相同的设置。

你需要从Nginx的禁用的sendfile,才能正常发送下符号链接这个静态文件。

location/{ 
     sendfile off; # Do it before try files 

     # try to serve file directly, fallback to rewrite 
     try_files $uri @rewriteapp; 
    }