使用symfony3提供远程静态文件

时间:2017-01-18 13:21:34

标签: nginx symfony fastcgi nginx-location

我的Nginx配置有问题。我有两个服务器,一个使用nginx,另一个使用symfony3中的webApp。 这是我的配置:

location /portal/mysite/ {

    set $frontRoot /srv/data/apps/mysite-portal-stag/current/web;
    set $sfApp app.php; # Change to app.php for prod or app_dev.php for dev

    root  /srv/data/apps/mysite-portal-stag/current/web;

    rewrite ^/portal/mysite/(.*)$ /$1 break; 
    try_files $uri @sfFront;

}
location @sfFront {

    root  /srv/data/apps/mysite-portal-stag/current/web;

    fastcgi_pass myserver:myport;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $frontRoot/$sfApp;

    fastcgi_param SCRIPT_NAME /portal/mysite/$sfApp;

}

webSite适用于所有php脚本,但所有资产(静态文件)都是损坏的文件。我不太了解Nginx如何工作以指示什么是静态文件并“告诉”我的代理他们不是脚本。

2 个答案:

答案 0 :(得分:7)

try_files指令会自动尝试查找静态文件,并在放弃之前将其作为静态文件提供,并将请求作为脚本提供。

  • http://nginx.org/r/try_files

      

    检查指定顺序的文件是否存在,并使用第一个找到的文件进行请求处理;处理在当前上下文中执行。根据root和alias指令从文件参数构造文件的路径。可以通过在名称的末尾指定斜杠来检查目录的存在,例如, “$ URI /”。如果未找到任何文件,则会进行内部重定向到最后一个参数中指定的uri。

请注意,虽然您已经在使用try_files,但似乎您的路径处理可能不符合规范。

至于你自己使用临时解决方案的答案,there's nothing wrong with using a rewrite or two,但是说,看起来你似乎从alias指令中受益。

但是,您从未解释过为什么要从/tmp中提供服务。请注意,某些cron脚本通常会自动清除/tmp,例如,在OpenBSD上,/etc/daily脚本会自动find并删除大约7天以上的文件({{ 3}},顾名思义。)

总结 ,您应首先弄清楚文件系统的Web视图与文件系统之间的适当映射。

随后,如果找到了前缀,只需为资产使用单独的locationalias

否则,找出try_files按预期工作的路径。

答案 1 :(得分:1)

在找到更好的解决方案之前,我找到了一个非常难看的解决方案,这就是我所做的:

  • 我复制了所有资产存储库并将其复制到我的代理服务器,其中nginx是。

这是我的新配置:

location /portal/mysite/ {

    set $frontRoot /srv/data/apps/mysite-portal-stag/current/web;
    set $sfApp app.php; 

    root  /srv/data/apps/mysite-portal-stag/current/web;

    rewrite ^/portal/mysite/(.*)$ /$1 break;
    try_files $uri @sfFront;

}
location /portal/mysite/asset {
    root  /tmp/mysite/asset;
    rewrite ^/portal/mysite/asset/(.*)$ /$1 break;
}
location @sfFront {

    set $frontRootWeb /srv/data/apps/mysite-portal-stag/current/web;
    root  /srv/data/apps/mysite-portal-stag/current/web;

    fastcgi_pass myAdressWeb:myPort;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $frontRoot/$sfApp;

    fastcgi_param SCRIPT_NAME /portal/mysite/$sfApp;

} 

现在它正在工作,所有的js / css和图片都找到了。

如果有人想到"清洁剂"回答,他非常欢迎回答。