Nginx、Rails 和 Passenger

Nginx、Rails 和 Passenger

我在使用乘客和轨道在子 uri 上提供轨道应用程序时遇到了麻烦。

我的nginx.conf的相关部分如下:

server {
    listen 80;
    server_name ~^(.*)\.domain\.com$ ;

    location /redmine/ {
        root /home/www/data/$1/redmine/public;
        passenger_enabled on;
        passenger_base_uri /redmine;
    }
}

Nginx 实际上正在寻找 /home/www/data/pckprojects/redmine/public/redmine/index.html 处的静态文件。

有什么想法吗?谢谢。

更新:

乘客的文件对此非常清楚,所以我应该说明为什么我要尝试以不同的方式处理这个问题。

最终,我希望 / 能够提供 Django 应用程序,可能通过 fastcgi 提供。如果您在 / 提供静态内容,并且希望在子 uri 提供 rails 应用程序,那么在子 uri 部署的乘客文档就是为此目的提供的。由于我要提供 fastcgi 应用程序,因此使用符号链接链接到 rails 应用程序是行不通的。

答案1

尝试使用“alias”而不是“root”。

位置/redmine/ {
  别名/home/www/data/$1/redmine/public;

答案2

我假设您的 redmine 安装位于 /home/www/data/$subdomain/redmine/。

下列的passanger 的 nginx 部署指南,如果你想从 /sub_uri 提供 rails 应用程序,sub_uri 文件夹应该是你应用程序公共文件夹的符号链接 - 例如 /redmine -> /path/to/redmine/public。由于你将 redmine 安装放入你(未来)根目录中的 redmine 文件夹中,并希望从 /redmine 提供它,我建议重命名它 - 出于本文的目的,我假设你将其重命名为 foo。

您需要进行一些调整。首先,您必须更改虚拟服务器的根目录:

server {
    listen 80;
    server_name ~^(.*)\.domain\.com$ ;
    root /home/www/data/$1/;
    passenger_enabled on;
}

接下来,我们需要创建前面提到的符号链接:

# cd /home/www/data/$1
# ls
foo
# ln -sf foo/public redmine
# rm foo/public/index.html

我之前没有安装过 redmine,但是如果在其公共文件夹中有 index.html,您应该按照上面的方法将其删除 - nginx 现在应该为您的应用程序提供服务,而不是提供该静态文件。

最后一步是告诉 nginx 我们希望 redmine 在 /redmine 下运行,因此我们最终在 nginx.conf 中执行如下操作:

server {
    listen 80;
    server_name ~^(.*)\.domain\.com$ ;
    root /home/www/data/$1/;
    passenger_enabled on;
    passenger_base_uri /redmine;
}

相关内容