configurationnginxhttp-status-code-403domain-name

Nginx 403 error: directory index of [folder] is forbidden


I have 3 domain names and am trying to host all 3 sites on one server (a Digital Ocean droplet) using Nginx.

mysite1.name mysite2.name mysite3.name

Only 1 of them works. The other two result in 403 errors (in the same way).

In my nginx error log, I see: [error] 13108#0: *1 directory index of "/usr/share/nginx/mysite2.name/live/" is forbidden.

My sites-enabled config is:

server {
        server_name www.mysite2.name;
        return 301 $scheme://mysite2.name$request_uri;
}
server {
        server_name     mysite2.name;

        root /usr/share/nginx/mysite2.name/live/;
        index index.html index.htm index.php;

        location / {
                try_files $uri $uri/ /index.html index.php;
        }

        location ~ \.php$ {
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                fastcgi_pass unix:/var/run/php5-fpm.sock;
                fastcgi_index index.php;
                include fastcgi_params;
        }
}

All 3 sites have nearly identical config files.

Each site's files are in folders like /usr/share/nginx/mysite1.name/someFolder, and then /usr/share/nginx/mysite1.name/live is a symlink to that. (Same for mysite2 and mysite3.)

I've looked at Nginx 403 forbidden for all files but that didn't help.

Any ideas on what might be wrong?


Solution

  • Here is the config that works:

    server {
        server_name www.mysite2.name;
        return 301 $scheme://mysite2.name$request_uri;
    }
    server {
        #This config is based on https://github.com/daylerees/laravel-website-configs/blob/6db24701073dbe34d2d58fea3a3c6b3c0cd5685b/nginx.conf
        server_name mysite2.name;
    
         # The location of our project's public directory.
        root /usr/share/nginx/mysite2/live/public/;
    
         # Point index to the Laravel front controller.
        index           index.php;
    
        location / {
            # URLs to attempt, including pretty ones.
            try_files   $uri $uri/ /index.php?$query_string;
        }
    
        # Remove trailing slash to please routing system.
        if (!-d $request_filename) {
                rewrite     ^/(.+)/$ /$1 permanent;
        }
    
        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        location ~ \.php$ {
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
        #   # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
        #   # With php5-fpm:
            fastcgi_pass unix:/var/run/php5-fpm.sock;
            fastcgi_index index.php;
            include fastcgi_params;
            fastcgi_param                   SCRIPT_FILENAME $document_root$fastcgi_script_name;
        }
    
    }
    

    Then the only output in the browser was a Laravel error: “Whoops, looks like something went wrong.”

    Do NOT run chmod -R 777 app/storage (note). Making something world-writable is bad security.

    chmod -R 755 app/storage works and is more secure.