我有一个django应用程序,使用nginx和uwsgi来提供它。我的静态文件返回404.我已将文件的所有权设置为与nginx用户名相对应。静态文件夹的路径直接从终端复制,我运行了collectstatic(静态文件通过django开发服务器成功提供)。我也跑了
chown -R username:username /home
和
chmod -R ug+r /home
我尝试了别名和root。
STATIC_ROOT在我的settings.py
中STATIC_ROOT = os.path.join(BASE_DIR, "static/")
这是我的nginx.conf:
user username;
worker_processes 1;
events {
worker_connections 1024;
}
http {
sendfile on;
gzip on;
gzip_http_version 1.0;
gzip_proxied any;
gzip_min_length 500;
gzip_disable "MSIE [1-6]\.";
gzip_types text/plain text/xml text/css
text/comma-separated-values
text/javascript
application/x-javascript
application/atom+xml;
# Configuration containing list of application servers
upstream app_servers {
server 127.0.0.1:8080;
# server 127.0.0.1:8081;
# ..
# .
}
# Configuration for Nginx
server {
# Running port
listen 80;
# Settings to serve static files
location /static/ {
# Example:
# root /full/path/to/application/static/file/dir;
alias /home/myapp/myapp/static/;
}
# Serve a static file (ex. favico)
# outside /static directory
location = /favico.ico {
root /app/favico.ico;
}
# Proxy connections to the application servers
# app_servers
location / {
proxy_pass http://app_servers;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
}
}
}
答案 0 :(得分:0)
将/home
目录chown给某个用户是个坏主意。该目录应属于root目录。把它改回原来的样子:
chown root:root /home
chmod u=rwx,g=rx,o=rx /home
(你运行的chmod可能没有改变它的权限,但更好的是确定,因此上面的第二个命令,它将它恢复到原来的状态。)
您说您的项目位于/home/username
下,但nginx配置显示为/home/myapp
。修复它。我认为它是/home/username
。 /home/username
需要修复一些权限:
chmod o+rx /home/username
另见(我的文章)http://djangodeployment.com/2016/11/21/how-django-static-files-work-in-production/。