Nginx 寻找与给定的 Django 静态文件 url 设置不同的路径
Nginx looking for a different path than what is given Django static files url setting
我 运行 遇到了一个非常奇怪的问题,我找不到原因。我有一个 django 应用程序,其中 uWSGI 作为我的应用程序服务器,Nginx 作为我们的反向代理。我在 Django 中对静态 url 的初始设置如下:
PROJECT_DIR = "/home/ubuntu/src/myapp"
MEDIA_ROOT = os.path.join(PROJECT_DIR, 'media')
MEDIA_URL = '/media/'
STATIC_ROOT = os.path.join(PROJECT_DIR, 'staticfiles')
STATIC_URL = '/staticfiles/'
STATICFILES_DIRS = (
os.path.join(PROJECT_DIR, 'static'),
)
nginx conf 中的内容如下:
server {
listen 80;
server_name stg1.myapp.com
client_max_body_size 5G; # adjust to taste
access_log /var/log/nginx/myapp-access.log combined;
error_log /var/log/nginx/myapp-error.log;
location /media {
alias /home/ubuntu/src/myapp/media/; # your Django project's media files - amend as required
}
location /static {
alias /home/ubuntu/src/myapp/staticfiles/;
}
location / {
uwsgi_pass django;
uwsgi_read_timeout 600s;
uwsgi_buffering off;
uwsgi_send_timeout 600s;
proxy_read_timeout 600s;
include /home/ubuntu/src/myapp/uwsgi_params;
}
}
现在,当我尝试访问服务器时,我收到静态文件的错误消息:
2016/12/13 20:33:03 [error] 30533#0: *194 open() "/home/ubuntu/src/myapp/staticfiles/files/css/base.css" failed (2: No such file or directory), client: 172.31.4.166, server: stg.myapp.com, request: "GET /staticfiles/css/base.css HTTP/1.1", host: "stg.myapp.com", referrer: "http://stg.myapp.com/profile/user1"
Collectstatic
复制了给定 STATIC_ROOT
位置的所有文件。但是实际搜索的路径是- STATIC_ROOT/files
.
当我将 STATIC_ROOT
更改为
时
STATIC_ROOT = os.path.join(PROJECT_DIR, 'staticfiles/files')
它起作用了。我仍然不知道为什么要查找目录 staticfiles/files
而不仅仅是 nginx conf 中给出的 staticfiles
目录。我应该在哪里寻找可能的原因?
EDIT - 每当在那里进行更改时,我都会重新启动 nginx 服务。所以没有问题。
在您的第一个设置中的任何地方都找不到目录 files。 [我还没有发表评论的特权]。
设置对我来说看起来不错,也许你只是在修改配置文件时忘记重启 Nginx。
参考 link STATIC_ROOT in Django on Server
还有Static Root and Static Url confusion in Django
找到原因了。
STATIC_URL = '/staticfiles/'
正在制造问题。必须是
STATIC_URL = '/静态/'。
较早的一个根据请求在导致我的问题的路径中附加 files
。
我 运行 遇到了一个非常奇怪的问题,我找不到原因。我有一个 django 应用程序,其中 uWSGI 作为我的应用程序服务器,Nginx 作为我们的反向代理。我在 Django 中对静态 url 的初始设置如下:
PROJECT_DIR = "/home/ubuntu/src/myapp"
MEDIA_ROOT = os.path.join(PROJECT_DIR, 'media')
MEDIA_URL = '/media/'
STATIC_ROOT = os.path.join(PROJECT_DIR, 'staticfiles')
STATIC_URL = '/staticfiles/'
STATICFILES_DIRS = (
os.path.join(PROJECT_DIR, 'static'),
)
nginx conf 中的内容如下:
server {
listen 80;
server_name stg1.myapp.com
client_max_body_size 5G; # adjust to taste
access_log /var/log/nginx/myapp-access.log combined;
error_log /var/log/nginx/myapp-error.log;
location /media {
alias /home/ubuntu/src/myapp/media/; # your Django project's media files - amend as required
}
location /static {
alias /home/ubuntu/src/myapp/staticfiles/;
}
location / {
uwsgi_pass django;
uwsgi_read_timeout 600s;
uwsgi_buffering off;
uwsgi_send_timeout 600s;
proxy_read_timeout 600s;
include /home/ubuntu/src/myapp/uwsgi_params;
}
}
现在,当我尝试访问服务器时,我收到静态文件的错误消息:
2016/12/13 20:33:03 [error] 30533#0: *194 open() "/home/ubuntu/src/myapp/staticfiles/files/css/base.css" failed (2: No such file or directory), client: 172.31.4.166, server: stg.myapp.com, request: "GET /staticfiles/css/base.css HTTP/1.1", host: "stg.myapp.com", referrer: "http://stg.myapp.com/profile/user1"
Collectstatic
复制了给定 STATIC_ROOT
位置的所有文件。但是实际搜索的路径是- STATIC_ROOT/files
.
当我将 STATIC_ROOT
更改为
STATIC_ROOT = os.path.join(PROJECT_DIR, 'staticfiles/files')
它起作用了。我仍然不知道为什么要查找目录 staticfiles/files
而不仅仅是 nginx conf 中给出的 staticfiles
目录。我应该在哪里寻找可能的原因?
EDIT - 每当在那里进行更改时,我都会重新启动 nginx 服务。所以没有问题。
在您的第一个设置中的任何地方都找不到目录 files。 [我还没有发表评论的特权]。
设置对我来说看起来不错,也许你只是在修改配置文件时忘记重启 Nginx。
参考 link STATIC_ROOT in Django on Server
还有Static Root and Static Url confusion in Django
找到原因了。
STATIC_URL = '/staticfiles/'
正在制造问题。必须是
STATIC_URL = '/静态/'。
较早的一个根据请求在导致我的问题的路径中附加 files
。