更多优质内容
请关注公众号

Nginx HTTP模块篇 server_name指令和Nginx处理HTTP请求的11个阶段(九)-张柏沛IT博客

正文内容

Nginx HTTP模块篇 server_name指令和Nginx处理HTTP请求的11个阶段(九)

栏目:其他内容 系列:Nginx入门系列 发布时间:2020-02-14 18:23 浏览量:2527

从上一节我们知道,当nginx的HTTP模块解析完了请求报文中的请求行和请求头之后,就会进入处理HTTP请求的11个阶段。

不过在此之前,nginx要先找到是哪一个server配置块对这个请求进行处理。

 

server_name 指令 

该指令可以根据域名决定使用哪个server块的配置。

server_name上下文为http/server/location

server_name 后可以跟多个域名,第一个是主域名

示例:

server_name zbpblog.com www.zbpblog.com     # 指定主域名和www域名

server_name *.zbpblog.com       # 泛域名
server_name www.zbpblog.*       # 泛域名2,泛域名只支持*在最前面或者最后面

server_name ~^www\d+\.zbpblog\.com$;    # 使用正则,在server_name中可以在开头加~表示使用正则

# 使用分组匹配并创建变量
server{
    server_name ~^(www\.)?(\w+)\.com$;
    location / {
        root /var/www/$2;   # 如 www.zbpblog.com 就会指向 /var/www/zbpblog这个目录
    }
}

# 可以给分组匹配中的匹配内容用定义变量名(使用?<变量名>)
server{
    server_name ~^(www\.)?(?<domain>\w+)\.com$;
    location / {
        root /var/www/$domain;
    }
}

server_name .zbpblog.com        # 匹配zbpblog.com和*.zbpblog.com

server_name _       # 匹配所有域名
server_name ""      # 匹配没有Host头部的请求    

 

server匹配的优先级:
精确匹配 > *在前的泛域名 > *在后的泛域名 > 按顺序匹配正则域名 > default server

如果一个域名符合多个server_name定义的域名规则,则默认走第一个符合的server_name的server配置块。

default server就是http中listen指定为default的server块或者第一个server块。

 

HTTP处理请求的11个阶段

post_read       # 对应realip模块
server_rewrite  # 对应rewrite模块
find_config
rewrite         # rewrite模块
post_rewrite    
preaccess       # limit_conn,limit_req
access          # auth_basic,access,auth_request模块
post_access
precontent      # try_files模块
content         # index,autoindex,concat模块
log             # access_log模块

 

post_是在...之后的意思;pre是在...之前的意思。

每一个阶段都有0个到多个模块来处理HTTP请求,每一个模块处理完之后,会把请求往下一个模块传递。这个过程如下:

-->realip-->server级别的rewrite-->find_config-->location级别的rewrite-->limit_req-->limit_conn-->access-->auth_basic-->auth_request-->try_files-->mirrors-->concat-->random_index-->index-->auto_index-->static-->log

11个阶段中经过的模块

 

下一节开始,将介绍11个阶段中比较重要的模块。




更多内容请关注微信公众号
zbpblog微信公众号

如果您需要转载,可以点击下方按钮可以进行复制粘贴;本站博客文章为原创,请转载时注明以下信息

张柏沛IT技术博客 > Nginx HTTP模块篇 server_name指令和Nginx处理HTTP请求的11个阶段(九)

热门推荐
推荐新闻