Tam
Tam

Reputation: 12042

Problem starting Passenger with Nginx

I have just setup Passenger with Nginx and it seems to install fine but when I run it I try to start it by:

passenger start -e production

I get:

=============== Phusion Passenger Standalone web server started ===============
PID file: /root/rails_apps/myapp/tmp/pids/passenger.3000.pid
Log file: /root/rails_apps/myapp/log/passenger.3000.log
Environment: production
Accessible via: http://0.0.0.0:3000/

You can stop Phusion Passenger Standalone by pressing Ctrl-C.
===============================================================================
2011/04/18 07:17:27 [error] 9125#0: *4 "/root/rails_apps/myapp/public/index.html" is forbidden (13: Permission denied), client: 127.0.0.1, server: _, request: "HEAD / HTTP/1.1", host: "0.0.0.0"

and I get "Unable to connect" when I try to access my site in the browser.

Here is configuration in nginx.conf

   server {
      listen 80;
      server_name myapp.com;
      root /root/rails_apps/myapp/public;   # <--- be sure to point to 'public'!
      passenger_enabled on;
   }

any ideas?

Upvotes: 1

Views: 14161

Answers (3)

Gabor Garami
Gabor Garami

Reputation: 1265

This error seems caused because the user of nginx cannot access the mentioned file. It can be caused not only if the /root/rails_apps/myapp/public is not have a correct permission, but even if one of the parent directories does not have that!

In your nginx.conf you can see something like:

user nginx;

http {
    # blah.
}

Sometimes parameter of the user can be different. Be sure to all folder is available by this user in the path. You can check it by sudo -Hu nginx /bin/bash -l and cat /root/rails_apps/myapp/public/index.html. Test and test it again with this command until you cannot see the content of the file.

A little explanation: with that sudo command you start a shell as an user nginx. And with cat command you can simulate the file reading.

Upvotes: 3

Surya
Surya

Reputation: 15992

Try this:

sudo passenger start -e production

Upvotes: 2

Vlad Khomich
Vlad Khomich

Reputation: 5880

since the path you specified is in /root (/root/rails_apps/myapp/public), nginx should have enough permissions:

user root; in nginx.conf

you should also start nginx as superuser ( sudo )

but it might be better to just move your rails app somewhere to your user directory and grant needed permissions to default nginx user 'www-data'

user www-data;

Upvotes: 1

Related Questions