Nginx 新人又来了,这次是 Nginx + Passenger 的配置问题。

MIx · 2013年05月11日 · 最后由 MIx 回复于 2013年05月11日 · 3958 次阅读

参照本社区上的 wiki,我在虚拟机上面安装配置好了 Ruby1.9.3/Rails3.2。 gem install passenger 没报错。 并用 rvmsudo passenger-install-nginx-module 安装配置好了 nginx,不过 nginx 是自己编译安装的,个人觉得配置没错(使用默认配置)。 nginx.conf 中配置

worker_processes  1;

events {
  worker_connections  1024;
}

http {
  passenger_root /home/deployer/.rvm/gems/ruby-1.9.3-p392@rails32/gems/passenger-3.0.19;
  passenger_ruby /home/deployer/.rvmwrappers/ruby-1.9.3-p392@rails32/ruby;

  include       mime.types;
  default_type  application/octet-stream;
  sendfile      on;
  keepalive_timeout  65;

  server {
    listen 80;
    server_name localhost;
    root /home/deployer/project/demo1/public;
    passenger_enabled on;
  }
}

但是用浏览器打开 localhost,始终报 403,这是哪里出错了呢?

贴 log 啊…

/home/deployer

nginx 默认是 nobody,设置成 deployer 试试

user deployer

不过更安全的方式是 nginx server 的 user 只需要有最基本的权限。你可以加上

user www group www

然后让用户 www 或者组 www 有对 passenger, project 目录的读权限,以及一些文件夹的写权限(比如 Rails 下的 tmp 和 log 目录)。注意对于 /path/to/file 的写权限,必须同时要求路径上所有目录的 rx 权限。

#1 楼 @blacktulip 对哦,这么重要的信息竟然忘记了,惭愧惭愧!我刚看了下 error.log,有个"permission denied",估计是哪个权限问题,先按 3L 的方法试试看。谢谢。

#3 楼 @doitian 谢谢!就是这里的问题,现在解决了。谢谢!

nobody 没问题,如果 nginx 启动的时候是 root,passenger 会根据项目目录的权限切换用户

http://www.modrails.com/documentation/Users%20guide%20Nginx.html#user_switching

不过nginx是自己编译安装的 楼主这步我觉得有问题,passenger 是要编译模块到 nginx 里面的,是跟着 passenger 脚本编译的 nginx 吗?

#6 楼 @Rei 我是使用的这一步:rvmsudo passenger-install-nginx-module,选项 1 是自动下载安装,但是我现在用的校园网连不上 sf,所以我就下载了 nginx 的包,解压,然后用选项 2,选择 nginx 的位置安装的。这种方式 passenger 也编译进 nginx 了吧。

passenger_user xxx;

#3 楼 @doitian 不过现在还有个问题,我是用的 vbox 测试的,vbox 网络连接选的桥接网卡,并给虚拟机分配了 IP。 在虚拟机里面测试的时候能没问题,可是在我的主机上面的浏览器里面输虚拟机的 IP,却不能访问,主机 ping 虚拟机可以通。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号