作者回复: 与linux上glob函数输出的文件顺序一致,见http://man7.org/linux/man-pages/man7/glob.7.html
作者回复: Nginx对Host与server_name的匹配分为两种:1、匹配上了,就用所属的server{};2、第1步没匹配上,就用default_server。这里所说的_下划线匹配所有,你可以理解为占位符,它只是为了增强可读性(因为是官网上推荐的http://nginx.org/en/docs/http/server_names.html),其实你用任何符号例如!@-效果都一样的。
就实现层面而言,当Nginx监听同一个端口的server{}超过1个时,就会把这个_符号也放到hash表里。而处理一个请求的Host头部时,就会查这个hash表,而_这样的符号,当然是查不到了,所以就会使用default_server。这就是其实现流程。
作者回复: 1、是的。
2、当开启server_name_in_redirect on时,如果URL根据root/alias判定为目录,但url结尾没带/,则返回302,此时location中的域名使用主域名。
default_server(你是说这个吧?),意思为当监听同一个端口有多个server{}时,若请求中的Host没匹配中任何一个server_name,则使用default_server
作者回复: 当末尾有斜杠时,认为带url了,此时location对请求URL采用替换关系,把location后的url1替换为proxy_pass中的url2。
第4部分课程中会详细介绍。
作者回复: 就像这样:
include mime.types;
include vhosts/*.conf;
参看这里:http://nginx.org/en/docs/ngx_core_module.html#include
作者回复: 有些不合法的请求没有Host头部
作者回复: 能否把完整的错误字符串粘贴出来?
作者回复: 如果所有server{}都没有server_name,那么唯一的就是default server,host匹配不上其他 server_name时,就会选用它
作者回复: 没有Host头部会报错。
作者回复: 与Host头部匹配
作者回复: 不是哦,这样性能可以想见会非常差,环节太多!
作者回复: 后面在谈到处理/结尾的url时,会深入谈这个指令。大概在说static模块提供的root/alias指令时,你关注下这一课。