nginx中root和alias的区别

CSDN话题挑战赛第2期
参赛话题:一起学Java
在这里插入图片描述

一、遇到问题现象

今天使用nginx搭建了一个网站,访问后出现404错误Not found. 上网查了一下原因,是由于nginx的配置不对。因为我是有两个web目录,这两个目录在不同的位置上。而且我不想把两个目录合并在一起,所以就要配置两个location。配置如下:

server {
        listen       90 ssl;
        server_name  localhost;
         ssl_certificate /n1.pem;
        #从腾讯云获取到的第二个文件的全路径
        ssl_certificate_key /n1.key;
        ssl_session_timeout 5m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
        ssl_prefer_server_ciphers on;
        #charset koi8-r;

        #access_log  logs/host.access.log  main;
        
		#测试根
        location / {
            root /web/test;
            index index.html index.htm;
        }

		#测试使用pak包
		location /pak/ {
   			 root  /usr/local/ ;
		}

		#正式使用dev包
        location /dev/ {
            root /web/dev/doc/;
            index index.html index.htm;
        }
}

上面的配置浏览https://localhost/dev/会显示404错误,因为root属性指定的值是要加入到最终路径的,所以访问的位置变成了/web/dev/doc/dev/。而我不想把访问的URI加入到路径中。所以就需要使用alias属性,其会抛弃URI,直接访问alias指定的位置, 所以最终路径变成/web/dev/doc。

		#正式使用dev包
        location /dev/ {
            alias /web/dev/doc/;
            index index.html index.htm;
        }
直观理解如下形式:
location /dev/{
	alias /web/dev/doc/; #这个查找文件的路径直接是/web/dev/doc/
}

location /dev/{
	root /web/dev/doc/; #这个查找文件的路径应该是/web/dev/doc/dev
}

#测试使用pak包
location /pak/ {
    root  /usr/local/ ;
}
## 这里使用root配置 如果访问 192.168.2.3/pak/a.html  则对应的路径为:/usr/local/pak/a.html
通过root配置则location配置的/pak/一定是要在root对应的/usr/local/目录下要有的目录

二、alias与root的用法区别

最基本的区别:alias指定的目录是准确的,root是指定目录的上级目录,并且该上级目录要含有location指定名称的同名目录。另外,根据前文所述,使用alias标签的目录块中不能使用rewrite的break。

(1) . alias虚拟目录配置中,location匹配的path目录如果后面不带"/“,那么访问的url地址中这个path目录后面加不加”/“不影响访问,访问时它会自动加上”/“;
但是如果location匹配的path目录后面加上”/“,那么访问的url地址中这个path目录必须要加上”/“,访问时它不会自动加上”/“。如果不加上”/“,访问就会失败!
(2) . root目录配置中,location匹配的path目录后面带不带”/",都不会影响访问。

所以,一般情况下,在nginx配置中的良好习惯是:
1)在location /中配置root目录;
2)在location /path中配置alias虚拟目录。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

丿乐灬学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值