作者回复: 对的
作者回复: 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。这就是其实现流程。
作者回复: 当末尾有斜杠时,认为带url了,此时location对请求URL采用替换关系,把location后的url1替换为proxy_pass中的url2。 第4部分课程中会详细介绍。
作者回复: 与linux上glob函数输出的文件顺序一致,见http://man7.org/linux/man-pages/man7/glob.7.html
作者回复: 就像这样: include mime.types; include vhosts/*.conf; 参看这里:http://nginx.org/en/docs/ngx_core_module.html#include
作者回复: 1、是的。 2、当开启server_name_in_redirect on时,如果URL根据root/alias判定为目录,但url结尾没带/,则返回302,此时location中的域名使用主域名。 default_server(你是说这个吧?),意思为当监听同一个端口有多个server{}时,若请求中的Host没匹配中任何一个server_name,则使用default_server
作者回复: 按它们在nginx.conf中出现的顺序,使用先匹配到的那个server_name
作者回复: 例子中吗?这里我用的是相对路径,是相对于nginx安装目录的conf路径而言,比如nginx/conf/examples,你可以用绝对路径的
作者回复: ^_^
作者回复: 你是说,你的配置是想return 302,但实际上匹配上了root/alias指令,返回了一个具体的文件吗?通常是没有匹配上server_name所致。你可以打开debug日志 ,在error.log中找到这个请求到底匹配上了哪一个server_name。具体参见143课。