nginx配置文件中location说明

1 nginx配置文件 文件结构

...              #全局块
events {         #events块   ...}
http      #http块
{
    ...   #http全局块
    server        #server块
    { 
        ...       #server全局块
        location [PATTERN]   #location块
        {            ...        }
        location [PATTERN] 
        {            ...        }
    }
    server
    {      ...    }
    ...     #http全局块
}
  • 全局块:配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。

  • events块:配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。

  • http块:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。

  • server块:配置虚拟主机的相关参数,一个http中可以有多个server。

  • location块:配置请求的路由,以及各种页面的处理情况。

还有比较常用的命令有include,将另一个配置文件包含起来。例如:include /etc/nginx/sites-enabled/*;

注意:当 server 子标签和 location 子标签中都有 root 指令时,location 的 root 指令不起作用。

2 location 语法规则

 location [=|~|~*|^~] /uri/ { … }

= 开头表示精确匹配

^~ 关闭正则匹配,当搜索到这个普通匹配模式后,将不再继续搜索正则匹配模式。开头表示uri以某个常规字符串开头,理解为匹配 url路径即可。nginx不对url做编码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa匹配到(注意是空格)。

~ 开头表示区分大小写的正则匹配

~* 开头表示不区分大小写的正则匹配

!~和!~*分别为区分大小写不匹配及不区分大小写不匹配 的正则

/ 通用匹配,任何请求都会匹配到。

多个location配置的情况下匹配顺序为首先匹配 =,其次匹配^~, 其次是按文件中顺序的正则匹配,最后是交给 / 通用匹配。当有匹配成功时候,停止匹配,按当前匹配规则处理请求。

location 匹配的优先级(与location在配置文件中的顺序无关)
= 精确匹配会第一个被处理。如果发现精确匹配,nginx停止搜索其他匹配。
普通字符匹配,正则表达式规则和长的块规则将被优先和查询匹配,也就是说如果该项匹配还需去看有没有正则表达式匹配和更长的匹配。
^~ 则只匹配该规则,nginx停止搜索其他匹配,否则nginx会继续处理其他location指令。
最后匹配理带有"~"和"~*"的指令,如果找到相应的匹配,则nginx停止搜索其他匹配;当没有正则表达式或者没有正则表达式被匹配的情况下,那么匹配程度最高的逐字匹配指令会被使用。

2 例子:nginx 通过访问/images/upload/文件名.html 到本机目录 /home/ubuntu/server/webapp/bbs/images/upload/文件名.html。配置如下

server {
    listen 80 default_server;
    listen [::]:80 default_server;
        charset utf-8
        root /var/www/html;

    # Add index.php to the list if you are using PHP
    index index.html index.htm index.nginx-debian.html;

    server_name _;    
        location / {
        # First attempt to serve request as file, then
        # as directory, then fall back to displaying a 404.
        try_files $uri $uri/ =404;
    }
        location ^~/images/upload/{
               root     /home/ubuntu/server/webapp/bbs/;

        }


}

说明:访问 ${server_name}:${listen}/${location} 即 140.187.167.220:80/images/upload/ 时 实际是访问服务器文件系统的 /home/ubuntu/server/webapp/bbs/images/upload/ 目录下的文件

3 反向代理可以查看 nginx 反向代理说明 博客