我在一台服务器上托管多个django应用程序。
用户访问时:http://dev-app.example.com/testapp1
我需要使用从$ uri动态生成的根路径来提供/ static,因为我没有在应用程序中使用相同的资源,而是使用相同的路径。
我的nginx配置文件树:
nginx
├── sites-enabled
│ ├── myconf
│ myapps/
│ ├── testapp1
│ └── testapp2
myconf文件:
server {
listen 8088;
server_name dev-app.example.com;
location = favicon.ico { access_log off; log_not_found off; }
location /static
# The line below isn't working even if the $uri has the string I want to concatenate
root /home/user$uri/current;
}
include /etc/nginx/myapps/*;
}
testapp1文件:
location /testapp1 {
include uwsgi_params;
uwsgi_pass unix:/home/user/testapp1/current/testapp1.sock;
}
testapp2文件:
location /testapp2 {
include uwsgi_params;
uwsgi_pass unix:/home/user/testapp2/current/testapp2.sock;
}
我想使用nginx内置变量$ uri在myconf
文件中为每个请求的应用程序构建我的/ static位置的根路径。
当用户打开http://dev-app.example.com/whatever时,我想提供此服务:
# In the myconf file
location /static {
root /home/user/whatever/current;
}
答案 0 :(得分:0)
设置每个服务器块内的静态位置
server {
listen 80;
server_name pool.simlabdevelopments.com;
root /srv/http/simlabdevelopments.com;
location /static/ {
alias /srv/webapps/autopool/static/;
}
}
答案 1 :(得分:0)
这不会那样。
首先,您必须了解HTTP请求的工作原理。您的网站或静态文件的每个请求都是独立的,并且拥有自己的URL。 Nginx无法自行配对静态文件请求从中请求静态文件的网站...
nginx可能知道的唯一方法是Referer
标头,浏览器可以将请求发送到静态文件。这可能包含从中请求静态文件的Web文档的路径,但它也可以是空的!它也可以只包含您网站的根路径。
此外,浏览器会尝试缓存他们可以使用的所有内容,因此,如果用户访问http://example.com/testapp1
并且该网站包含http://example.com/static/style.css
的引用,则浏览器会将其缓存并根据请求向http://example.com/testapp2
浏览器获取不要下载新的css文件,而是使用缓存的文件。
如果您确定您的网络客户端始终发送正确的Referer
标头并且不会缓存任何静态文件,您可以尝试从nginx中的$http_referer
变量中提取应用程序的路径。< / p>