首页 > 网站 > Nginx > 正文

详解Nginx静态服务配置(root和alias指令)

2024-08-30 12:24:37
字体:
来源:转载
供稿:网友

静态文件

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

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

基本配置

与Nginx Location Url一文关于location url配置的实验一样,本文也使用vagrant虚拟机里的nginx。其基本配置如下:

/etc/nginx/sites-enabled/pro.conf

server {    listen 80 default_server;    server_name localhost;    access_log /var/log/nginx/pro/access.log;    error_log /var/log/nginx/pro/error.log;    error_page 404 /404.html;    root /vagrant/pro;    index index.html index.htm;}

项目的目录如下:

pro tree.├── 403.html├── 404.html├── index.html├── static│  ├── flask│  │  └── m.png│  └── stc.jpg└── upload  └── up.png3 directories, 6 files

分别有两个静态文件夹,一个是static,另外一个是upload。

初识root

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

访问http://192.168.33.10/static/stc.jpg 会发现图片已经返回。我们还尚未配置 location,为啥会正确的找到文件?学习root或者alias指令的时候,最好的办法是给文件拓展名加上一个字符,使得该文件在硬盘中不存在,那么就能从nginx的error.log中看到nginx寻找文件的方式。

访问 http://192.168.33.10/static/stc.jpgx,然后查看 /var/log/nginx/pro/error.log文件,可以看到如下的错误信息:

2016/09/28 07:41:48 [error] 4416#0: *70 open() "/vagrant/pro/static/stc.jpgx" failed (2: No such file or directory), client: 192.168.33.1, server: localhost, request: "GET /static/stc.jpgx HTTP/1.1", host: "192.168.33.10"

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

 http://192.168.33.10 /static/stc.jpg  /vagrant/pro     /static/stc.jpg

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

root指令

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

location ^~ /static {  root /vagrant/pro/static;}            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表