加入收藏 | 设为首页 | 会员中心 | 我要投稿 商洛站长网 (https://www.0914zz.com/)- AI应用、CDN、边缘计算、云计算、物联网!
当前位置: 首页 > 运营中心 > Nginx > 正文

ruby-on-rails-Nginx与乘客的重写规则

发布时间:2021-01-12 13:10:12 所属栏目:Nginx 来源:互联网
导读:我正在尝试在两个实例中使用Passenger从Apache迁移到nginx,以托管Rails应用程序.该应用程序接收一个图像请求-如果该图像存在于/ system / logos / $requestedimage中,则应将其提供服务;或者,如果需要,应允许其点击Rails应用程序生成该图像(然后在该位置)缓存

我正在尝试在两个实例中使用Passenger从Apache迁移到nginx,以托管Rails应用程序.该应用程序接收一个图像请求-如果该图像存在于/ system / logos / $requestedimage中,则应将其提供服务;或者,如果需要,应允许其点击Rails应用程序生成该图像(然后在该位置)缓存到/ system / logos).

在Apache中,我使用了以下命令:

RewriteCond %{DOCUMENT_ROOT}/system/logos/%{REQUEST_FILENAME} -f
RewriteRule ^/(.*)$http://assets.clg.eve-metrics.com/system/logos/$1

这很好.资产.子域是另一个子域,但是具有相同的根,只是禁用了Passenger,专门用于托管静态文件(到期).

在nginx中,我使用以下内容:

server {
  listen 80;
  passenger_enabled on;
  server_name  clg.eve-metrics.com www.clg.eve-metrics.com;
  root /opt/www/clg/current/public;
  gzip             on;
  gzip_min_length  1000;
  gzip_proxied     expired no-cache no-store private auth;
  gzip_types       text/plain application/xml text/css application/javascript;
  gzip_disable     msie6;
  error_page   500 502 503 504  /50x.html;
  location = /50x.html {
  }
  if (-f $document_root/system/logos$request_filename) { 
    rewrite ^/(.*)$http://assets.clg.eve-metrics.com/system/logos/$1 break;
  }
}

这不是很好.其实.它永远不会重定向到缓存的路径,也永远不会访问Rails应用程序.就像nginx假设它是静态资产一样,因此不要将其传递给Passenger.有没有一种方法可以阻止此行为,从而使其击中该应用程序? 最佳答案 我的rails应用程序正在nginx和passenger上运行.我已将Rails缓存目录从默认的/ public移至/ public / system / cache /.为了使其工作,我必须将其插入我的vhost配置文件中:

if (-f $document_root/system/cache/$uri/index.html) {
  rewrite (.*) /system/cache/$1/index.html break;
}

if (-f $document_root/system/cache/$uri.html) {
  rewrite (.*) /system/cache/$1.html break;
}

我记得我也曾尝试使其与$request_filename一起使用,但没有使其起作用.尝试用$uri代替,看看是否有效:-)

(编辑:商洛站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读