使用nginx无法更新符号链接静态文件

时间:2013-05-10 11:46:06

标签: symfony nginx symfony-2.2

我有一个使用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总是可以的。

5 个答案:

答案 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;
    }