nginx的location、root、alias指令用法和区别
nginx指定文件路径有两种方式root和alias,指令的使用方法和作用域:
[root]
语法:root path
默认值:root html
配置段:http、server、location、if
[alias]
语法:alias path
配置段:location
root与alias主要区别在于nginx如何解释location后面的uri,这会使两者分别以不同的方式将请求映射到服务器文件上。
root的处理结果是:root路径+location路径
alias的处理结果是:使用alias路径替换location路径
alias是一个目录别名的定义,root则是最上层目录的定义。
还有一个重要的区别是alias后面必须要用“/”结束,否则会找不到文件的。。。而root则可有可无~~
root实例:
1 2 3 |
location ^~ /t/ { root /www/root/html/; } |
如果一个请求的URI是/t/a.html时,web服务器将会返回服务器上的/www/root/html/t/a.html的文件。
alias实例:
1 2 3 |
location ^~ /t/ { alias /www/root/html/new_t/; } |
如果一个请求的URI是/t/a.html时,web服务器将会返回服务器上的/www/root/html/new_t/a.html的文件。注意这里是new_t,因为alias会把location后面配置的路径丢弃掉,把当前匹配到的目录指向到指定的目录。
注意:
1. 使用alias时,目录名后面一定要加"/"。
3. alias在使用正则匹配时,必须捕捉要匹配的内容并在指定的内容处使用。
4. alias只能位于location块中。(root可以不放在location中)
@ mood
https://blog.redis.com.cn/5494.html 也可以参考这里
@ puffbaby
m站 web站分开写server,各自写各自的路径。
站长,如果是tp5开发的www和m站,统一的web目录是public。然后两个网站都要做robots.txt。
规则怎么写?似乎这样不行:
location /robots.txt {
alias /wwwroot/demo.cn/public/m/; #这个是M网站的conf文件配置
}
location /robots.txt {
alias /wwwroot/demo.cn/public/pc/; #这个是WWW网站的conf文件配置
}
@Noah
哈哈,https只是表示启用了ssl而已,通常默认的端口是443,比如https://test.com,我们就通过443端口建立https连接,如果是https://test.com:8888,这里我们就通过8888端口建立https连接。
@jupyter用户
https意思就是使用443端口,就和http使用的是80端口一样,你这转到443端口的8888端口,明显是不对的
使用alias时,目录名后面一定要加"/"。
这个说法不对。
alias别名用于location路劲的完全替换。
alias目录后面带不带/ 需要跟location保持一致就可以。
譬如:
location /t {
alias /www/root/html/new_t;
}
重定向时怎么让浏览器转入正确的位置?
比如,我有一个jupyter在localhost:8888, 于是我设置 location /jupyterserver1/ 位置为 proxy_pass https://localhost:8888/. 此时, 浏览器访问 https://localhost/jupyterserver1/ 会被自动转到 https://localhost/lab, 而不是 localhost/jupyterserver1/lab,此时 nginx 返回404
把proxy_pass https://localhost:8888/ 结尾的/去掉变成 https://localhost:8888
学到了。一天之内使用搜索引擎搜索了两个问题都看到了你写的文章,觉得很奇妙
@shuiqiang
官方文檔 ( ALIAS )沒有 (加或不加) SLASH 的警語,
博主的資料,有參考什麼文獻嗎?
好像不对吧,我在nginx官方文档看到alias后面可以不加/的
博主,能否转载到我的博客收藏?
可以
学习用Ngnix做图片服务器,遇到root和alias问题。学习了。
装个反垃圾插件吧,评论区全是垃圾评论
学习了,nginx真的很强大