我需要通过我的应用服务器提供我的应用程序8080,以及来自目录的静态文件,而无需触及应用服务器.我拥有的nginx配置是这样的......
# app server on port 8080
# nginx listens on port 8123
server {
listen 8123;
access_log off;
location /static/ {
# root /var/www/app/static/;
alias /var/www/app/static/;
autoindex off;
}
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
Run Code Online (Sandbox Code Playgroud)
现在,使用此配置,一切正常.请注意,该root指令已被注释掉.
如果我激活root和停用alias- 它会停止工作.但是,当我/static/从root它删除尾随它开始再次工作.
有人可以解释发生了什么.还请解释清楚和冗长之间有什么区别root和alias和它们的用途.
tre*_*der 986
我找到了我的困惑的答案.
指令root和alias指令之间有非常重要的区别.这种差异存在于处理root或alias处理中指定的路径的方式中.
在root指令的情况下,将完整路径附加到根,包括位置部分,而在alias指令的情况下,仅将路径中不包括位置部分的部分附加到别名.
为了显示:
假设我们有配置
location /static/ {
root /var/www/app/static/;
autoindex off;
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,Nginx将推导出的最终路径
/var/www/app/static/static
Run Code Online (Sandbox Code Playgroud)
404由于内部没有static/,因此将返回static/
这是因为位置部分被附加到指定的路径中root.因此,root正确的方法是
location /static/ {
root /var/www/app/;
autoindex off;
}
Run Code Online (Sandbox Code Playgroud)
另一方面,随着alias位置部分掉落.所以对于配置
location /static/ {
alias /var/www/app/static/;
autoindex off;
}
Run Code Online (Sandbox Code Playgroud)
最终路径将正确形成为
/var/www/app/static
Run Code Online (Sandbox Code Playgroud)
请参阅此处的文档:http://wiki.nginx.org/HttpCoreModule#alias
liu*_*jun 85
就像@treecoder一样
在
root指令的情况下,将完整路径附加到根,包括位置部分,而在alias指令的情况下,仅将路径中不包括位置部分的部分附加到别名.
一张图片胜过千言万语
用于root:
用于alias:
ant*_*tov 33
你的情况,你可以使用root指令,因为$uri该部分location指令是与去年相同的root指令部分.
Nginx文档也提供了它:
当location匹配指令值的最后一部分时:Run Code Online (Sandbox Code Playgroud)location /images/ { alias /data/w3/images/; }最好使用root指令:
Run Code Online (Sandbox Code Playgroud)location /images/ { root /data/w3; }
和root指令将附加$uri到路径.
mel*_*oly 20
只是@ good_computer非常有用的答案的快速附录,我想用文件夹替换URL的根,但只有当它匹配包含静态文件的子文件夹(我想保留作为路径的一部分).
例如,如果请求的文件在/app/js或中/app/css,请查看/app/location/public/[that folder].
我使用正则表达式来使用它.
location ~ ^/app/((images/|stylesheets/|javascripts/).*)$ {
alias /home/user/sites/app/public/$1;
access_log off;
expires max;
}
Run Code Online (Sandbox Code Playgroud)
alias用于替换请求路径中的位置部分路径 (LPP),而root用于附加到请求路径中。
它们是将请求路径映射到最终文件路径的两种方式。
alias只能在位置块中使用,它将覆盖外部root。
alias并且root不能在位置块中一起使用。
| 归档时间: |
|
| 查看次数: |
215865 次 |
| 最近记录: |