在 Nginx 中将非 GET 请求路由至乘客

在 Nginx 中将非 GET 请求路由至乘客

我有一个 Rails 应用程序,它在多个自定义目录中缓存页面。除了非 GET 请求之外,其他一切都运行正常,非 GET 请求在 Nginx 中传递 405 错误,因为我的配置没有将它们路由到乘客。我的问题是将非 GET 请求直接转发给乘客的最有效方法是什么?

我的 nginx.conf 当前如下所示:

server {
       server_name railsapp.local;
       root /Users/i0n/Sites/railsapp/public;
       location / {
               try_files $uri /$host/$uri/index.html /$host/$uri.html /$host/$uri @passenger;
       }
       location @passenger {
               passenger_enabled on;
       }
}

答案1

if ($request_method != 'GET') {
    passenger_enabled on;    
}

答案2

所以我找不到一种有效的无错误方法来实现这一点。问题是,如果在 Rails 缓存中创建了一个文件夹,那么与此文件夹名称匹配的路由将在检查 Rails 路由之前静态解析到该文件夹​​(破坏更新创建和销毁操作)。我通过为与缓存文件夹冲突的路径创建自定义路由名称来解决这个问题。现在一切正常。

相关内容