nginx中是设置虚拟目录为什么不生效?

离开江湖 发布于 2018/04/28 17:04
阅读 2K+
收藏 2

nginx版本:1.12.1
nginx虚拟主机配置如下:

server{
    listen 80;
    server_name abc.local;
    index index.html index.htm index.php;
    root  /opt/tool/web;
    location = /favicon.ico {
        log_not_found off;
        access_log off;
    }
    location /test {            
        alias /opt/tool/web/cdn/;
    }
    location = /robots.txt {
        allow all;
        log_not_found off;
         access_log off;
    }
    include enable-php.conf;
    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
          expires      30d;
    }

    location ~ .*\.(js|css)?$ {
          expires      12h;
    }

    access_log off;
}

此配置文件在servers目录下
nginx.conf 通过

include servers/*;

引入。
访问. http://abc.local/test/1.jpg
出现404
查看nginx错误日志

[error] 36523#0: *63 open() "/opt/tool/web/test/1.jpg" failed (2: No such file or directory), client: 127.0.0.1, server: abc.local, request: "GET /test/1.jpg HTTP/1.1", host: "abc.local"

我在test这个虚拟目录中设置是的
/opt/tool/web/cdn/
为什么不生效,他还要去访问root /opt/tool/web 这个目录?

加载中
0
小古小小
小古小小

你把那个:

location /test {            
        alias /opt/tool/web/cdn/;
    }

改为:location /test/ {

                alias /opt/tool/web/cdn/;

试试

0
小古小小
小古小小

或者你设置的目录一定要存在

0
perfgao
perfgao

很明显你的nginx location配置存在问题: location的匹配是存在优先级的。

当你访问: http://abc.local/test/1.jpg 时,其实命中的是 

    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
          expires      30d;
    }

这个location,所以,错误日志才会出现

open() "/opt/tool/web/test/1.jpg" failed

一般location优先级: = > ^~ > ~ 、~* > 常规字符串匹配

返回顶部
顶部