Nginx与Phusion Passenger URI路由

时间:2013-05-07 18:28:07

标签: ruby-on-rails nginx passenger reverse-proxy

这是我的Nginx服务器配置文件

server {
        listen   80;
        location /node {
                proxy_pass      http://127.0.0.1:8080;
                include         /etc/nginx/proxy.conf;
        }
        location /ror {
                root /var/www/ror/public;
                passenger_enabled on;
                proxy_cache        off;
                proxy_pass_header  Server;
        }
        location / {
                root /usr/share/nginx/www;
        }
}

这主要是一个'HelloWorld'设置,用于同时测试REST服务器的运行节点和RoR。

问题是我需要servername.com/ror转发到/var/www/ror/public,以便RoR做出回应。我尝试了一些配置,但无法弄清楚如何正确转发它。问题似乎是ror URI段被传递给RoR,这导致它寻找那个返回404的控制器。

只要我在URI中包含/var/www,其他配置就会将root更改为/ror/public

那么,有没有办法以这种方式在反向代理上执行子URI路由?


好的,所以我添加了重写规则。

location /ror {
        root /var/www/ror/public;
        rewrite ^/ror/(.*)$ /$1 last;
        passenger_enabled on;
        proxy_cache        off;
        proxy_pass_header  Server;
}

然而,问题是现在它正在提供默认根目录中的文件,在我的安装中它是/usr/nginx并且完全忽略了位置块内的根。

**我很感激帮助。这是我第一次使用Nginx(通常是一个Apache Fiend),所以我无法理解它是如何解释这些命令的。

2 个答案:

答案 0 :(得分:0)

本地fs中

/ror/a.txt/var/www/ror/public/ror/a.txt,因此您需要在location /ror中使用重写规则。

rewrite ^/ror(.*)$ $1;

答案 1 :(得分:0)

我最终想通了。

我的VHOST部分:

server {
        #server_name domain.com;
        listen   80;
        root /var/www/rails;

        passenger_enabled on;
        passenger_base_uri /todo;

        rails_spawn_method smart;
        rails_env development;

        proxy_cache off;
        proxy_pass_header Server;

        location /node {
                proxy_pass      http://127.0.0.1:8080;
                include         /etc/nginx/proxy.conf;
        }
}

我最终创建了一个名为rails的新目录,在其中我创建了一个指向实际应用程序公共目录的符号链接。

ln -s /var/www/todo/public /var/www/rails/todo

另外,我没有正确初始化Passenger,这就是为什么它没有响应并回复错误。这个设置并不理想,考虑到我现在必须手动添加每个子URI应用程序,但它可以工作。