3

我有一个 Symfony2.2.1 项目,它使用 nginx/1.2.6 (Ubuntu 13.04 VirtualBox) 运行。资产的渲染可以通过硬链接进行。

使用符号链接,它仅适用于第一次初始化。当我更新符号链接源时,浏览器渲染会使用����字符转换我的修改。浏览器没有错误,没有修改的部分不受影响。

修改后我的 CSS 文件结尾的示例:

[...]

div.form-actions {
    text-align: center;
}

�����

目前,我使用硬链接。我对 Apache2 没有这个问题...:/

你有想法吗?谢谢

Nginx 站点配置:

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 总是可以的。

4

5 回答 5

2

创建符号链接后,尝试重新启动 php5-fpm。

sudo service php5-fpm reload

并检查 disable_symlinks 选项http://nginx.org/en/docs/http/ngx_http_core_module.html#disable_symlinks

于 2013-05-18T08:17:17.157 回答
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
    }
}

我不确定这是否可行,但值得一试。

于 2013-05-18T08:08:08.723 回答
1

这篇文章帮助了:

https://coderwall.com/p/ztskha

“简单来说,sendfile() 使用内核调用将文件直接从磁盘复制到 tcp。如果您使用远程文件系统(如 nfs 或 VirtualBox Guest Additions 的东西),这种方法不可靠。”

本质上,如果您尝试在您的主机上存在的来宾 VM 上提供文件,请关闭 NGINX 的 sendfile。

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

于 2013-11-19T01:28:11.687 回答
0

尝试清除浏览器缓存,有时 Nginx 会将文件像未设置 mime 类型一样抛出原始文件。还可以尝试更改 HttpHeaders 将每个文件的过期和缓存控制设置为最小,这取决于您的项目是否仍在开发中。这样服务器正在推送的文件总是会更新,并且不会被浏览器缓存。

于 2013-05-21T09:07:28.590 回答
-1

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

您需要从 Nginx 禁用 sendfile 才能在符号链接下正确发送此静态文件。

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

        # try to serve file directly, fallback to rewrite
        try_files $uri @rewriteapp;
    }
于 2015-01-08T11:36:42.317 回答