server {
listen loc.app:80;
root /app/frontend/web;
index index.php;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ ^/admin {
proxy_pass http://127.0.0.1:81;
}
location ~* \.php$ {
#php conf
}
}
server {
listen 127.0.0.1:81;
root /app/backend/web;
index index.php;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ \.(js|css)$ {
echo "$document_root"; # /app/backend/web;
echo "$fastcgi_script_name"; # /admin/assets/569a8b41/css/bootstrap.css
############################## ISSUE ##############################
# $fastcgi_script_name must be /assets/569a8b41/css/bootstrap.css #
###################################################################
}
location ~* \.php$ {
#php conf
}
}
http://loc.app/admin - 好的
http://loc.app/admin/style.css - 返回 404
如何强制nginx正确处理静态文件?
最佳答案
js、css等静态文件与fastcgi无关
但是,由于该文件位于 /admin/assets/569a8b41/css 而您的 conf 将 /app/backend/web 作为文档根目录,那么这将永远不会被发现,你总是会得到一个 404,因为你要求 nginx 寻找 /app/backend/web/admin/assets/569a8b41/css/bootstrap.css 不存在。
由于设置的复杂性,您可以添加另一个仅供内部使用的位置 block 来处理请求的实际服务,并从原始位置 block 重定向到此。
location ~ /admin/assets/569a8b41 {
root /admin/assets/569a8b41;
}
location ~ ^/admin/(.+)\.(js|css)$ {
rewrite ^/admin/(.+)\.css$ /admin/assets/569a8b41/css/$1.css last;
rewrite ^/admin/(.+)\.js$ /admin/assets/569a8b41/js/$1.js last;
}
http://loc.app/admin/style.css 之类的请求将在 /admin/assets/569a8b41/css/style.css 中查找,并且如果存在,它将提供这个。
请注意,这假设您在 /admin/assets/569a8b41 下有单独的 css 和 js 文件夹。
关于php - Nginx 为静态文件代理不正确的 fastcgi_script_name,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37773753/
我正在使用这个:4.times{|i|assert_not_equal("content#{i+2}".constantize,object.first_content)}我之前声明过局部变量content1content2content3content4content5我得到的错误NameError:wrongconstantnamecontent2这个错误是什么意思?我很确定我想要content2=\ 最佳答案 你必须用一个大字母来调用ruby常量:Content2而不是content2。Aconstantnamestart
我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server
“输出”是一个序列化的OpenStruct。定义标题try(:output).try(:data).try(:title)结束什么会更好?:) 最佳答案 或者只是这样:deftitleoutput.data.titlerescuenilend 关于ruby-on-rails-更好的替代方法try(:output).try(:data).try(:name)?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.c
这个问题在这里已经有了答案:Whatdoes`if__FILE__==$0`meaninRuby(6个答案)关闭6年前。我在审查Ruby代码时偶然发现了这个语法。代码是:if__FILE__==$PROGRAM_NAME#somecode...end我想__FILE__是一个变量,可以让我获取我所在文件的名称?但是$PROGRAM_NAME简化了什么?另外,为什么这个if语句是必需的,因为程序可以使用或不使用它?
我知道还有其他相同的问题,但他们没有解决我的问题。我不断收到错误:Aws::Errors::MissingRegionErrorinBooksController#create,缺少区域;使用:region选项或将区域名称导出到ENV['AWS_REGION']。但是,这是我的配置开发.rb:config.paperclip_defaults={storage::s3,s3_host_name:"s3-us-west-2.amazonaws.com",s3_credentials:{bucket:ENV['AWS_BUCKET'],access_key_id:ENV['AWS_ACCE
A/ctohttp://wiki.nginx.org/CoreModule#usermaster进程曾经以root用户运行,是否可以以不同的用户运行nginxmaster进程? 最佳答案 只需以非root身份运行init脚本(即/etc/init.d/nginxstart),就可以用不同的用户运行nginxmaster进程。如果这真的是你想要做的,你将需要确保日志和pid目录(通常是/var/log/nginx&/var/run/nginx.pid)对该用户是可写的,并且您所有的listen调用都是针对大于1024的端口(因为绑定(
我正在尝试在我的远程服务器上运行以下命令(通过capistrano或ssh):bundleexecRAILS_ENV=productionscript/delayed_jobstart但我收到此错误消息:bundler:notexecutable:script/delayed_job以前从未见过这个,谷歌也没有适合我的东西。知道可能是什么问题吗? 最佳答案 也许它没有运行权限?尝试运行这个命令chmod+xscript/delayed_job然后再次执行文件。 关于ruby-on-rai
我遇到了一些Ruby代码,我试图理解为什么变量在initialize方法声明中的名称末尾有冒号。冒号有什么原因吗?attr_reader:var1,:var2definitialize(var1:,var2:)@var1=var1@var2=var2end 最佳答案 那些是关键字参数。您可以按名称而非位置使用它们。例如ThatClass.new(var1:42,var2:"foo")或ThatClass.new(var2:"foo",var1:42)Anarticleaboutkeywordargumentsbythoughtbot
我希望生成一个链接,该链接的前缀附加到命名路由本身。像这样显示路径“/old/recipes”:recipes_path(:prefix=>"old/")#thecorrectwayshouldshow"/old/recipes"我不想动routes.rb文件,而是修改带前缀的命名路由。这可能吗?您将如何正确地做到这一点?编辑:我正在使用Rails3。添加可选前缀的原因是我也想使用普通的recipes_path。所以我想同时使用“/recipes”和“/old/recipes”。 最佳答案 如果您不想触及路由文件,您将会遇到很多麻烦
我编写了一个非常简单的“部署”脚本,作为我的裸git存储库中的post-updateHook运行。变量如下livedomain=~/mydomain.comstagingdomain=~/stage.mydomain.comgitrepolocation=~/git.mydomain.com/thisrepo.git(bare)core=~/git.mydomain.com/thisrepo.gitcore==addedremoteintoeachlive&stagegitslive和stage都初始化了gitrepos(非裸),我已经将我的裸仓库作为远程添加到它们中的每一个(名为co