关于nginx location匹配规则。

配置一:

location = / {
        root /usr/share/nginx/myhtml;
        index test.html;
}

location / {
        root /usr/share/nginx/html;
        index index.html;
}

错误提示:2016/12/26 06:03:52 [error] 35#35: *3 open() "/usr/share/nginx/html/test.html" failed (2: No such file or directory), client: 172.17.0.1, server: www.myweb.com, request: "GET / HTTP/1.1", host: "www.myweb.com"

问题:为什么匹配的是第二个条件?不是优先"="精准匹配的吗?

配置二:

location = /index.html {
    root /usr/share/nginx/myhtml;
    index test.html;
}

location / {
    root /usr/share/nginx/html;
    index index.html;
}

现象:

(一)访问www.myweb.com (nginx是在docker容器上使用的,修改了宿主机的host),显示的是/usr/share/nginx/myhtml/test.html的页面。

(二)访问http://www.myweb.com/index.html 返回404,错误:[error] 47#47: *7 open() "/usr/share/nginx/myhtml/index.html" failed (2: No such file or directory), client: 172.17.0.1, server: www.myweb.com, request: "GET /index.html HTTP/1.1", host: "www.myweb.com"

问题:访问 www.myweb.com 的时候不应该是匹配第二条规则吗?怎么会符合第一条的精准匹配?
访问http://www.myweb.com/index.html是找的 index.html 文件?而不是 index 配置的 test.html文件?那问题一里面的 index 配置为什么能起效果?

阅读 4.1k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题