当我向Rails控制器操作发送一个post请求时,我遇到了一个405错误。 发送请求用于获取json文件,让get请求传递一个标准的html页面。 问题是HTML被caching。
我在http://millarian.com/programming/ruby-on-rails/nginx-405-not-allowed-error/上看到了这个问题的解决scheme
if ($request_method != GET) { proxy_pass http://foobar; break; }
proxy_pass中的url通常是mongrel服务器的url。 对乘客有没有类似的解决scheme?
我是一个完整的nginx新手,试图从Apache迁移。
我终于找到了一个方法。 我有一套重写条件来处理Rails使用的配置的缓存目录。
# Check the path + .html if (-f $document_root/cache/$uri.html) { rewrite (.*) /cache/$1.html break; }
…
即使请求是POST,这些重写也会被应用,导致405错误。
只有在请求是GET时,我才设法应用重写。 我不确定它是否是最有效的解决方案,但它似乎工作。 学习如何处理Nginx中的多个条件是最棘手的部分。 (来源: http : //wiki.nginx.org/RewriteMultiCondExample )
set $dest ""; if ($request_method = GET) { set $dest "/cache"; } # Check / files with index.html if (-f $document_root/cache/$uri/index.html) { set $dest $dest/$uri/index.html ; } # Check the path + .html if (-f $document_root/cache/$uri.html) { set $dest $dest/$uri.html ; } # Check directly if (-f $document_root/cache/$uri) { set $dest $dest/$uri ; } if ($dest ~* ^/cache/(.*)$) { rewrite (.*) $dest break; }
更好的解决方案?