Nginx配置location中root指令的使用

xiaohai 2018-10-20 11:38:19 4944人围观 标签: Nginx  配置 
简介虽然经常使用Nginx,但是某个时候一些额外的需求会让自己配置Nginx的时候出现各种问题。所以本文我将根据自己工作中遇到的问题进行说明,从而来理解Nginx的root指令。

  一次同事在使用Nginx的时候,想在同一个域名后跟一个名字指向一个临时的活动站点。例如:http://www.xxx.com 这个是主站的地址,他想要的是:http://www.xxx.com/activity。其实大家很快就明白可以直接在网站的根目录下新建一个doc目录,然后将对应的文件放在下面不就可以了吗。确实这样是可行,但是他们首先的一个坑就是将活动网站的地址放在了另外的一个目录下。其次就是静态文件的路径是通过绝对路径来实现的。

首先解决网站目录不一致的问题,如果我们主站的目录在:

/home/www/site/home

活动站点的目录在:

/home/www/site/activity
一、root指令

现在要让nginx里进行配置,都会通过location指令中指定root来解决。确实,想法是对的,但是这里面一定要注意下面的问题,如果我们使用root来进行配置,如:

#错误配置 location /activity { root /home/www/site/activity; index index.html index.htm; }

对不起,这样的配置将去寻找的网站的目录是:/home/www/site/activity/activity,所以看到这里大家肯定明白了,我们正确的配置方式是:

#正确配置 location /activity { root /home/www/site; index index.html index.htm; }

这样的话,那么我们访问的目录就是/home/www/site/activity;但是如果我们要使用全路径的话有没有解决方式的,答案是肯定的,下面我们将介绍另一种方式。

二、alias指令

这个指定是干啥的,这个就是目录的别名,它就是一个全路径。先说配置:

location /activity { alias /home/www/site/activity/; index index.html index.htm; }

这样的话就可以直接访问/home/www/site/activity/下的文件了,这里一定要注意activity后面一定有个斜线,如果没有就会出现找不到文件的情况。

通过上面两种方式可以满足他们的要求了。但是他们还有一个问题就是在引用静态资源的时候使用的是绝对路径/,所以尽管上面的配置完成后,静态资源还是访问不了。所以作为前端开发的同学一定要记住,尽量使用相对路径来获取静态资源,这样可以为自己减少很多不必要的麻烦。这里提供一个vue打包静态资源参考:vue打包静态资源路径不正确的解决办法

到这里为止,我们的配置基本就说完了。下面总结下:

  • root其实是网站的根目录,所以在访问的时候是从根目录开始查找的;
  • alias是目录的别名,那么这个就可以是一个目录的全路径。