当前位置:C++技术网 > 精选软件 > 云平台开发架构分析系列:10 Nginx服务器默认配置文件入门分析2

云平台开发架构分析系列:10 Nginx服务器默认配置文件入门分析2

更新时间:2017-06-26 00:02:16浏览次数:1+次

        在文章《云平台开发架构分析系列9:Nginx服务器默认配置文件入门分析1》文章中,我们已经介绍过了配置文件的加载和监听端口以及域名的配置项等相关内容。本篇继续介绍其他的配置项。要看完整的配置文件内容,请先阅读前面这篇文章哦。

        前面我们已经介绍了nginx如何配置多个网站,根据监听端口或者域名来区分多个网站。而网站是如何组成的呢?最基本的就是各种网页文件。那么这些网站的文件存放在哪呢?网站的文件的根目录又在哪呢?和服务器的文件系统又是什么关系呢?

        其实我们这系列的文章,并不是简单的介绍一些配置什么的,还有相关的背景知识,知其然知其所以然,所以请认真阅读哦。

        网站的根目录,我们一般称为网站的虚拟根目录。一般说根目录指的是文件系统的根目录。然而我们网站的文件的操作都只需要相对于网站自己的最上层目录就行了。如果我们把包含网站所有文件的文件夹当做网站的根目录,那么所有网页文件就只需要使用网站的根目录来指定路径,而无需关注系统的文件系统的路径了。一方面这让网站的文件引用变得简单,另一方面,这样也让网站的目录信息对外不公开,更安全。在网站根目录下的所有文件,表面上是使用绝对路径,但是从操作系统的文件系统来看,还是相对路径。相对于网站的根目录而已。我们一般也就将网站的这个根目录定义为虚拟目录,目的也是为了保护网站文件真实路径不被外部知道。

         对于这些概念不必较真,知道是怎么回事就行了。网站的根目录就是操作系统的文件系统中的一个目录而已。只不过在nginx的配置文件中将这个目录指定下来,在网站内部就只看得到网站根目录,而无需知道这个网站根目录对应系统目录是哪个。nginx在实际操作文件的时候,会读取这个配置的信息,用网站根目录和实际的目录的映射关系将操作文件的路径转为真实的路径,进而操作文件。

        我们也只是将网页文件放在这个根目录就行了。那么这个根目录如何配置呢?默认情况下,nginx将/usr/local/nginx/html/设置为默认网站的根目录。如果你懒得配置,你直接将网页文件放在这个目录就行了。当然,如果你想配置,自然也是可以更改的。配置网站目录的配置项是http下的server下的location(位置)项。我们在后面指定/,然后在花括号内指定root的值就可以了。

        如果我们只是在root后面写一个目录名,则用conf目录所在的路径作为当前路径。所以我们看到默认配置文件里写的html,也就是conf目录所在的位置里的html目录了。在root后面填写的路径是文件系统的真实路径。你可以将网站根目录指定到任何文件系统的位置。比如/data/或/webfile/。

        这样你可以自己定义网站根目录对应的实际的目录在哪了。如下:

    

location / {
    root   /data/html/;
    index  index.html index.htm;
}
     我们在location后面指定的/代表网站根目录,root后面的目录是真实目录路径。这里我们就将网站的根目录映射到了/data/html/目录。我们将网页文件放到/data/html/就可以了。

    

        对于网站的根目录来说,一般会定义一个主页。也就是当网站直接被访问的时候,第一个返回给浏览器的页面,叫做首页或者是主页。我们使用index后面的文件名就是指定的主页的文件。可以使用空格隔开多个主页文件。如果第一个主页文件不存在,则会使用第二个,如果第二个也不存在,则第三个。以此类推。而这里面定义的主页文件,始终相对location这个路径,即使index后面的文件使用绝对路径,也是相对于location的root指定的路径的。只有root后面才是真实文件系统的绝对路径。

        当然,location不只是用来定义网站根目录的。location相当于一个地址映射的意思。我们还可以定义更多的映射,这样让地址写起来会更短,更方便。如下面的定义:

    

error_page   500 502 503 504  /50x.html;
location = /50x.html {
     root   html;
}
     我们这里就定义了从根目录到50x.html的路径。这样,程序在使用/50x.html的时候,会映射到/html/50x.html,这就是网站的目录路径。当然,从html这个目录到系统的实际路径,nginx内部还会做一层转换的。location后面的第一个/表示的是根目录,而根目录相当于这个被定义的路径是可以被单独指定的。所以,我们可以将/50x.html前面这个/进行临时指定。其他地方在引用到/50x.html的时候,会找到定义/50x.html这个路径的location,然后获取里面的root来替换50x.html前面的/,形成一个更全面的路径。如果root是相对路径,则还会扩展为绝对路径,如果root后面本身就是绝对路径了,那么就不再转换了。

    

        那么还有一组,如下:

    

error_page  404   /404.html;
     这一组后面的/404.html没有任何location定义,那么如何将这个地址转为真实的地址呢?如果/404.html没有像/50x.html那样被直接定义,那么至少会定义/的。所以转换路径时,会寻找/的定义,自然也就找到了。然后用里面的root值和404.html进行拼接。和/50x.html的过程一样。

    

        我们确定了根目录和主页文件之后,我们还需要确定错误页面。一个是404,页面丢失。一个是50x,服务器出错。我们使用error_page来指定。格式如下:

    error_page 错误码 跳转的页面地址

        我们可以定义一系列的错误码,跳转到一个页面,如50x.html那样定义。那么到此,我们虚拟主机网站的基本配置也就差不多了。其实也就是端口、主机名(域名)、网站根目录(虚拟根目录)、主页、错误页面。

        另外,在server外,http内的配置,对于server来说是全局的。还有http以外的配置项,则是更加全局的。我们将在后面为你解释。本篇讲的这些配置选项,要想掌握,还得自己动手去操作一遍,去验证一遍。