0

这是我的 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 做出响应。我已经尝试了一些配置,但无法弄清楚如何让它正确转发。问题似乎是rorURI 段被传递给 RoR,这导致它查找该控制器,该控制器返回 404。

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

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


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

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

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

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

4

2 回答 2

0

/ror/a.txt/var/www/ror/public/ror/a.txt本地 fs 中,所以需要在location /ror.

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

于 2013-05-07T21:51:25.067 回答
0

我最终想通了。

我的虚拟主机部分:

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 应用程序,这种设置并不理想,但它可以工作。

于 2013-05-08T16:45:49.403 回答