我正在尝试在两个实例中使用Passenger从Apache迁移到nginx,以托管Rails应用程序.该应用程序接收一个图像请求-如果该图像存在于/ system / logos / $requestedimage中,则应将其提供服务;或者,如果需要,应允许其点击R...
我正在尝试在两个实例中使用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代替,看看是否有效:-)
本文标题为:ruby-on-rails-Nginx与乘客的重写规则
基础教程推荐
- go语言的魔幻旅程14-反射 2023-09-05
- R语言多元线性回归实例详解 2022-12-15
- R语言使用gganimate创建可视化动图 2022-12-10
- Ruby on Rails在Ping ++ 平台实现支付 2023-07-22
- R语言关联规则深入详解 2022-11-08
- Go语言实现一个Http Server框架(二) Server的抽象 2023-07-25
- golang 自然语言处理工具(gohanlp) 2023-09-05
- ruby-on-rails – Nginx支持的Rails应用程序中缺少Content-Length Header 2023-09-20
- R语言histogram(直方图)的具体使用 2022-10-28
- R语言学习代码格式一键美化 2022-12-05
