我的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如何工作以指示什么是静态文件并“告诉”我的代理他们不是脚本。
答案 0 :(得分:7)
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视图与文件系统之间的适当映射。
随后,如果找到了前缀,只需为资产使用单独的location
和alias
。
否则,找出try_files
按预期工作的路径。
答案 1 :(得分:1)
在找到更好的解决方案之前,我找到了一个非常难看的解决方案,这就是我所做的:
这是我的新配置:
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和图片都找到了。
如果有人想到"清洁剂"回答,他非常欢迎回答。