[Django]-Nginx is throwing an 403 Forbidden on Static Files

29๐Ÿ‘

โœ…

It appears the user nginx is running as (nginx?) is missing privileges to read the local file /home/ubuntu/virtualenv/myapp/myapp/homelaunch/static/img/templated/home/img.png. You probably wanna check file permissions as well as permissions on the directories in the hierarchy.

๐Ÿ‘คbryn

35๐Ÿ‘

MacOs El Capitan: At the top of nginx.conf write user username group_name

My user name is Kamil so i write:

user Kamil staff;

(word โ€˜staffโ€™ is very important in macOS). This do the trick. After that you donโ€™t need to change any permission in your project folder and files.

13๐Ÿ‘

It seems the web server user doesnโ€™t have read permissions to the static files.
You can solve this in 2 ways:

  1. (easiest, safer) run the nginx as you app user instead of default nginx user. To do this, add the following in nginx.conf

    user your_app_user
    

    Replace your_app_user with appropriate unix username for your app. In this case the your_app_user already has necessary permissions to the static content.

  2. Another way would be to to grant permissions for the web server user to the static dir.

๐Ÿ‘คuser4212639

10๐Ÿ‘

The minimum fix that worked for me is:

sudo chmod -R 664 /home/ubuntu/virtualenv/myapp/myapp/homelaunch/static/
sudo chmod -R a+X /home/ubuntu/virtualenv/myapp/myapp/homelaunch/static/

(BTW, in my case the static folder is called collected_static)

๐Ÿ‘คo_c

10๐Ÿ‘

The best solution in that case would be to add www-data to username group:

gpasswd -a www-data username

For your changes to work, restart nginx

nginx -s reload

๐Ÿ‘คSanjay Sikdar

8๐Ÿ‘

Try specifying a user at the top of your nginx.conf, above the server section.

user www-data;
๐Ÿ‘คeezis

3๐Ÿ‘

I had the same issue no long ago. It might be a combination of factors. I found how to fix 403 access denied by replacing the user in the nginx.conf file.

  • I deployed my website on an ubuntu server using Digital Ocean.
  • I created a new user on my new ubuntu server and give admin priviliges
    adduser newuser

    usermod -aG sudo newuser 
  • I updated my new server and installed few packages
    sudo apt update

    sudo apt install python3-pip python3-dev libpq-dev postgresql postgresql-contrib nginx curl 
  • I followed all this beautiful instruction on how to deploy your site on Digital Ocean
  • Since I changed the user and I ssh into my new server using this new user, I need to replace the user on the nginx.conf. By default nginx.conf user is www-data:
    user www-data;

    worker_processes auto;

    pid /run/nginx.pid;

Then I replaced with my sudo user and solved my problem. ๐Ÿ˜€

    user newuser;

    worker_processes auto;

    pid /run/nginx.pid;
  • Then I restart nginx, gunicorn and postgresql(even if the last one it is not really necessary)
    sudo systemctl restart nginx 

    sudo systemctl restart gunicorn

    sudo systemctl restart postgresql

And tada.. ๐Ÿ™‚ no more issue.

๐Ÿ‘คManuCiao

2๐Ÿ‘

Fix 403 error with Django static files on Ubuntu server.

  1. Run this -> gpasswd -a www-data your_proj_username

  2. Reload nginx -> nginx -s reload

  3. Check chmod for your dirs: /home, /home/proj_dir, /home/proj_dir/static

  • Run this โ€“ stat --format '%a' /home . Result must be 755
  • Run this โ€“ stat --format '%a' /home/your_proj_dir/static . Result must be 755
  • Run this โ€“ stat --format '%a' /home/your_proj_dir . Result must be 750
  1. If you have different values you can try to change this:
  • sudo chmod 755 /home
  • sudo chmod 755 /home/your_proj_dir/static
  • sudo chmod 750 /home/your_proj_dir
  1. Reload you project-server. This solve all permission errors

-7๐Ÿ‘

After hours upon hours following so many articles, I ran across :
http://nicholasorr.com/blog/2008/07/22/nginx-engine-x-what-a-pain-in-the-bum/

which had a comment to chmod the whole django app dir, so I did:

sudo chmod -R myapp

This fixed it. Unbelievable!

Thanks to those who offered solutions to fix this.

๐Ÿ‘คCodeTalk

Leave a comment