Zedrian
Zedrian

Reputation: 909

Linode Update - 403 Forbidden with Rails and Passenger Nginx

Hello My App was working fine, until Linode made some kind of hardware update on the server. All the files on the server are still there, and everything seems to be the same as before. I contacted Linode, and they mentioned it may be a permission problem somewhere (which I can't find) and they cannot be of more help.

The Nginx error log shows the following:

2015/06/21 18:07:23 [error] 2870#0: *19684 directory index of
"/home/aurelplouf/apps/myapp/current/public/" is forbidden, 
client: XXX.XXX.XXX.XXX, server: XXX.XXX.XX.XX, request: "GET / HTTP/1.1", 
host: "myapp.com"

I am a bit at a loss because nothing changed from my part.

I checked the passenger-config --root

/home/aurelplouf/.rvm/gems/[email protected]/gems/passenger-4.0.53

which ruby

/home/aurelplouf/.rvm/rubies/ruby-2.1.2/bin/ruby

and the nginx.conf with the following setup:

http {
    passenger_root /home/aurelplouf/.rvm/gems/[email protected]/gems/passenger-5.0.11;
    passenger_ruby /home/aurelplouf/.rvm/gems/[email protected]/wrappers/ruby;

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

    server {
        listen       80;
        server_name  xxx.xxx.xx.xx myapp.com www.myapp.com *.myapp.com
        root /home/aurelplouf/apps/myapp/current/public;
        passenger_enabled on;

        location / {
            #root   html;
            # root /home/aurelplouf/apps/myapp/current/public;
            # index  index.html index.htm;
            passenger_enabled on;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

UPDATE Finally I checked the file permissions in the public folder

aurelplouf@ruby:~/apps/myapp/current$ ls -al public
total 32
drwxrwxr-x  2 aurelplouf aurelplouf 4096 Jun 21 17:15 .
drwxrwxr-x 15 aurelplouf aurelplouf 4096 Jun 21 17:15 ..
-rw-rw-r--  1 aurelplouf aurelplouf  728 Feb 15  2014 404.html
-rw-rw-r--  1 aurelplouf aurelplouf  711 Feb 15  2014 422.html
-rw-rw-r--  1 aurelplouf aurelplouf  643 Feb 15  2014 500.html
lrwxrwxrwx  1 aurelplouf aurelplouf   51 Jun 21 17:13 assets -> /home/aurelplouf/apps/myapp/shared/assets
-rw-rw-r--  1 aurelplouf aurelplouf 1150 Feb 15  2014 favicon.ico
-rw-rw-r--  1 aurelplouf aurelplouf  431 Oct 21  2014 robots.txt
-rw-rw-r--  1 aurelplouf aurelplouf  340 Oct 21  2014 sitemap.xml.gz
lrwxrwxrwx  1 aurelplouf aurelplouf   51 Jun 21 17:15 system -> /home/aurelplouf/apps/myapp/shared/system
lrwxrwxrwx  1 aurelplouf aurelplouf   52 Jun 21 17:15 uploads -> /home/aurelplouf/apps/myapp/shared/uploads

Upvotes: 3

Views: 218

Answers (1)

sjaime
sjaime

Reputation: 1500

The passenger_enabled directive can only occur once in your config file. Keep it at the server level and remove you location / block.

Also, you might want to consider adding an assets block in your server section to allow static asset caching in the browser (as long as you're using rails asset pipeline, which you should):

http {
  passenger_root /home/aurelplouf/.rvm/gems/[email protected]/gems/passenger-5.0.11;
  passenger_ruby /home/aurelplouf/.rvm/gems/[email protected]/wrappers/ruby;

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

  server {
    listen       80;
    server_name  xxx.xxx.xx.xx myapp.com www.myapp.com *.myapp.com;
    root /home/aurelplouf/apps/myapp/current/public;
    passenger_enabled on;

    location ~ ^/(assets)/  {
            root /home/aurelplouf/apps/myapp/current/public;
            gzip_static on;
            expires max;
            add_header Cache-Control public;
            gzip_vary on;
            etag off;
    }


    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }
  }
}

Upvotes: 3

Related Questions