我正在尝试设置我的 nginx conf,以便为我的多个 Django 项目提供相关文件。最终我希望每个应用程序都可以在www.example.com/app1,www.example.com/app2等等。它们都从位于各自项目根目录中的“静态文件”目录提供静态文件。
项目结构:
Home
Ubuntu
Web
www.example.com
ref
logs
app
app1
app1
static
bower_components
templatetags
app1_project
templates
static-files
app2
app2
static
templates
templatetags
app2_project
static-files
app3
tests
templates
static-files
static
app3_project
app3
venv
当我使用下面的配置时,为我在 /static/ 位置指定的应用程序提供静态文件没有任何问题。我还可以访问在其位置找到的不同应用程序。但是,我无法弄清楚如何同时为所有应用程序提供所有静态文件。我研究过对静态位置使用“try_files”命令,但无法弄清楚如何查看它是否有效。
Nginx Conf-仅为一个应用程序提供静态文件:
server {
listen 80;
server_name example.com;
server_name www.example.com;
access_log /home/ubuntu/web/www.example.com/logs/access.log;
error_log /home/ubuntu/web/www.example.com/logs/error.log;
root /home/ubuntu/web/www.example.com/;
location /static/ {
alias /home/ubuntu/web/www.example.com/app/app1/static-files/;
}
location /media/ {
alias /home/ubuntu/web/www.example.com/media/;
}
location /app1/ {
include uwsgi_params;
uwsgi_param SCRIPT_NAME /app1;
uwsgi_modifier1 30;
uwsgi_pass unix:///home/ubuntu/web/www.example.com/app1.sock;
}
location /app2/ {
include uwsgi_params;
uwsgi_param SCRIPT_NAME /app2;
uwsgi_modifier1 30;
uwsgi_pass unix:///home/ubuntu/web/www.example.com/app2.sock;
}
location /app3/ {
include uwsgi_params;
uwsgi_param SCRIPT_NAME /app3;
uwsgi_modifier1 30;
uwsgi_pass unix:///home/ubuntu/web/www.example.com/app3.sock;
}
# what to serve if upstream is not available or crashes
error_page 400 /static/400.html;
error_page 403 /static/403.html;
error_page 404 /static/404.html;
error_page 500 502 503 504 /static/500.html;
# Compression
gzip on;
gzip_http_version 1.0;
gzip_comp_level 5;
gzip_proxied any;
gzip_min_length 1100;
gzip_buffers 16 8k;
gzip_types text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript;
# Some version of IE 6 don't handle compression well on some mime-types,
# so just disable for them
gzip_disable "MSIE [1-6].(?!.*SV1)";
# Set a vary header so downstream proxies don't send cached gzipped
# content to IE6
gzip_vary on;
}
本质上我想要类似的东西(我知道这行不通)
location /static/ {
alias /home/ubuntu/web/www.example.com/app/app1/static-files/;
alias /home/ubuntu/web/www.example.com/app/app2/static-files/;
alias /home/ubuntu/web/www.example.com/app/app3/static-files/;
}
或者(它可以根据 uri 提供静态文件)
location /static/ {
try_files $uri $uri/ =404;
}
所以基本上,如果我像上面一样使用 try_files,问题出在我的项目目录结构上吗?还是我完全偏离了这一点,我需要将每个应用程序放在子域中,而不是走这条路?感谢您的任何建议
TLDR:我想去:
www.example.com/APP_NAME_HERE
并让 nginx 提供静态位置服务:
/home/ubuntu/web/www.example.com/app/APP_NAME_HERE/static-files/;
答案1
简单的选择是为每个应用程序创建子域(例如:app1.example.com)。这样,您可以在每个 URL 上为静态文件目录设置一个别名。