Reputation: 3667
I have a django app, python 2.7 with gunicorn and nginx.
Nginx is throwing a 403 Forbidden Error
, if I try to view anything in my static
folder @:
/home/ubuntu/virtualenv/myapp/myapp/homelaunch/static
nginx config(/etc/nginx/sites-enabled/myapp
) contains:
server {
listen 80;
server_name *.myapp.com;
access_log /home/ubuntu/virtualenv/myapp/error/access.log;
error_log /home/ubuntu/virtualenv/myapp/error/error.log warn;
connection_pool_size 2048;
fastcgi_buffer_size 4K;
fastcgi_buffers 64 4k;
root /home/ubuntu/virtualenv/myapp/myapp/homelaunch/;
location /static/ {
alias /home/ubuntu/virtualenv/myapp/myapp/homelaunch/static/;
}
location / {
proxy_pass http://127.0.0.1:8001;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
add_header P3P 'CP="ALL DSP COR PSAa PSDa OUR NOR ONL UNI COM NAV"';
}
}
error.log contains:
2013/11/24 23:00:16 [error] 18243#0: *277 open() "/home/ubuntu/virtualenv/myapp/myapp/homelaunch/static/img/templated/home/img.png" failed (13: Permission denied), client: xx.xx.xxx.xxx, server: *.myapp.com, request: "GET /static/img/templated/home/img2.png HTTP/1.1", host: "myapp.com", referrer: "http://myapp.com/"
access.log contains
xx.xx.xx.xxx - - [24/Nov/2013:23:02:02 +0000] "GET /static/img/templated/base/animg.png HTTP/1.1" 403 141 "http://myapp.com/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:25.0) Gecko/20100101 Firefox/25.0"
xx.xx.xx.xxx - - [24/Nov/2013:23:02:07 +0000] "-" 400 0 "-" "-"
I tried just viewing say a .css
file in /static/
and it throws an error like this in source:
<html>
<head><title>403 Forbidden</title></head>
<body bgcolor="white">
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx/1.1.19</center>
</body>
</html>
Upvotes: 31
Views: 72533
Reputation: 345
Fix 403 error with Django static files on Ubuntu server.
Run this -> gpasswd -a www-data your_proj_username
Reload nginx -> nginx -s reload
Check chmod for your dirs: /home
, /home/proj_dir
, /home/proj_dir/static
stat --format '%a' /home
. Result must be 755stat --format '%a' /home/your_proj_dir/static
. Result must be 755stat --format '%a' /home/your_proj_dir
. Result must be 750sudo chmod 755 /home
sudo chmod 755 /home/your_proj_dir/static
sudo chmod 750 /home/your_proj_dir
Upvotes: 3
Reputation: 562
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
Upvotes: 16
Reputation: 131
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.
adduser newuser
usermod -aG sudo newuser
sudo apt update
sudo apt install python3-pip python3-dev libpq-dev postgresql postgresql-contrib nginx curl
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;
sudo systemctl restart nginx
sudo systemctl restart gunicorn
sudo systemctl restart postgresql
And tada.. :) no more issue.
Upvotes: 4
Reputation: 499
It seems the web server user doesn't have read permissions to the static files. You can solve this in 2 ways:
(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.
Another way would be to to grant permissions for the web server user to the static dir.
Upvotes: 13
Reputation: 92687
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.
Upvotes: 36
Reputation: 2153
Try specifying a user at the top of your nginx.conf, above the server section.
user www-data;
Upvotes: 9
Reputation: 4213
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
)
Upvotes: 12
Reputation: 3667
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.
Upvotes: -6
Reputation: 3325
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.
Upvotes: 29