【问题标题】:Nginx with Phusion Passenger URI routing带有 Phusion 乘客 URI 路由的 Nginx
【发布时间】:2013-05-09 00:45:49
【问题描述】:

这是我的 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 服务器运行的 Node 和 RoR。

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

只要我在 URI 中包含 /ror/public,另一种配置,将 root 更改为 /var/www 就可以工作。

那么,有没有办法以这种方式在反向代理上执行子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),所以我很难理解它是如何解释这些命令的。

【问题讨论】:

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


    【解决方案1】:

    /ror/a.txt在本地fs中是/var/www/ror/public/ror/a.txt,所以需要在location /ror中使用rewrite rule。

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

    【讨论】:

      【解决方案2】:

      我终于明白了。

      我的 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
      

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

      【讨论】:

        猜你喜欢
        • 2012-06-23
        • 1970-01-01
        • 2012-11-23
        • 1970-01-01
        • 1970-01-01
        • 2012-09-25
        • 2011-02-28
        • 1970-01-01
        • 2011-12-10
        相关资源
        最近更新 更多