详解Nginx静态服务配置(根和别名指令)

  

  

Nginx以其高性能著称,常用与做前端反向代理服务器。同时Nginx也是一个高性能的静态文件服务器。通常都会把应用的静态文件使用Nginx处理。
  

  

配置nginx的静态文件有两个指令,一个根和一个别名。对于这两个指令,是否需要在路径的后面加上斜杠,经常容易让人犯晕,本文通过尝试不同的匹配规则,归纳了一个比较通用的配置方式。
  

  


  

  

与Nginx位置Url一文关于位置Url配置的实验一样,本文也使用的流浪汉虚拟机里的Nginx。其基本配置如下:
  

  

/etc/nginx/sites-enabled/pro。参看
  

        服务器{   听80 default_server;         server_name主机;      access_log/var/log/nginx/pro/access.log;   error_log/var/log/nginx/pro/error.log;      error_page 404/404. html;      根/漂泊者/专业;   指数指数。html你;   }      

项目的目录如下:
  

        箴树   。   ├──403. html   ├──404. html   ├──index . html   ├──静态   │├──烧瓶   ││└──m.png   │└──stc.jpg   └──上传   └──up.png      3目录,6文件      

分别有两个静态文件夹,一个是静态的,另外一个是上传。
  

  


  

  

根是指定项目的根目录,适用与服务器和位置。可以指定多个,如果locaiton没有指定,会往其外层的服务器或http中寻找继承。
  

  

访问https://cache.yisu.com/upload/information/20200622/115/58290.jpg会发现图片已经返回。我们还尚未配置位置,为啥会正确的找到文件?学习根或者别名指令的时候,最好的办法是给文件拓展名加上一个字符,使得该文件在硬盘中不存在,那么就能从nginx的错误。日志中看到nginx寻找文件的方式。
  

  

访问https://cache.yisu.com/upload/information/20200622/115/58290.jpgx,然后查看/var/log/nginx/pro/error.日志文件,可以看到如下的错误信息:
  

  
  

2016/09/28 07:41:48(错误)4416 # 0:* 70开()“/漂泊者/pro/静态/stc.jpgx”失败(2:没有这样的文件或目录),客户:192.168.33.1,服务器:localhost,请求:“得到/静态/stc.jpgx HTTP/1.1”,主持人:“192.168.33.10”

     

即/漂泊者/pro/静态/stc.jpgx文件不存在。的确我们没有这个文件。如果文件名正确,就能访问,原因是由于在服务器中指定了根/漂泊者/pro,此时的nginx就在该目录下寻找文件,而url上的地址,正好和文件的路径一致
  

        静态/stc.jpg http://192.168.33.10   流浪汉/pro/静态/stc.jpg      

由此可以猜想,nginx中根指令的地址,其实是替换了匹配后的url中的主机。
  

  


  

  

为了验证上面的猜想,需要多写几个位置做实验。添加一个位置配置如下:
  

        ^ ~/静态位置{   根/漂泊者/pro/静态;   }   之前      

再次访问https://cache.yisu.com/upload/information/20200622/115/58290.jpg,发现并不能显示图片了,查看error.log返回如下:
  

  
  

2016/09/28 07:48:57(错误)5978 # 0:* 71开()“流浪汉/pro/静态/静态/stc.jpg”失败(2:没有这样的文件或目录),客户:192.168.33.1,服务器:localhost,请求:“得到/静态/stc.jpg HTTP/1.1”,主持人:“192.168.33.10”

     

nginx把地址识别成/vargrant/pro/静态/静态/stc.jpg多了一个静态的,套用上面的规则,其组合为192.168.33.10==//pro/静态游民,url是/静态/stc.jpg。置换可以得到的流浪汉/pro/静态+/静态/stc.jpg。与错误的错误一致。解决方案就是把根中的静态去掉,马上就能访问图片了。
  

  

既然是那么把文件夹静态命名为失学,其结果又会怎样?
  

        ^ ~/静态位置{   根/漂泊者/专业;   }   之前      

访问https://cache.yisu.com/upload/information/20200622/115/58290.jpg得到错误:
  

  
  

2016/09/28 07:54:46(错误)5992 # 0:* 73开()“/漂泊者/pro/静态/stc.jpg”失败(2:没有这样的文件或目录),客户:192.168.33.1,服务器:localhost,请求:“得到/静态/stc.jpg HTTP/1.1”,主持人:“192.168.33.10”

     

计算路径/流浪汉/pro +/静态/stc.jpg,找不到流浪汉/pro/静态/stc.jpg文件,符合之前所说的规则,尝试修改位置:

详解Nginx静态服务配置(根和别名指令)