设为首页 加入收藏

TOP

nginx基础(一)
2023-07-25 21:43:22 】 浏览:83
Tags:nginx 基础

1. 基础知识

1.1 基本配置

main                                # 全局配置

events {                            # nginx 工作模式配置
}

http {                                # http 设置
    ....
    server {                        # 服务器主机配置
        ....
        location {                    # 路由配置
            ....
        }
        location path {
            ....
        }
        location otherpath {
            ....
        }
    }

    server {
        ....
        location {
            ....
        }
    }

    upstream name {                    # 负载均衡配置
        ....
    }
}

如果想要生成 nginx 规范配置,可以参考nginxconfig.io

下面是 nginx 一些配置中常用的内置全局变量,你可以在配置的任何位置使用它们。

变量名 功能
$host 请求信息中的 Host,如果请求中没有 Host 行,则等于设置的服务器名
$request_method 客户端请求类型,如 GETPOST
$remote_addr 客户端的 IP 地址
$args 请求中的参数
$content_length 请求头中的 Content-length 字段
$http_user_agent 客户端 agent 信息
$http_cookie 客户端 cookie 信息
$remote_addr 客户端的 IP 地址
$remote_port 客户端的端口
$server_protocol 请求使用的协议,如 HTTP/1.0HTTP/1.1\
$server_addr 服务器地址
$server_name 服务器名称
$server_port 服务器的端口号

1.2 location 匹配规则

语法规则:location [=|~|~*|^~] /uri/ { … }

模式 含义
location = /uri = 表示精确匹配,只有完全匹配上才能生效
location ^~ /uri ^~ 开头对 URL 路径进行前缀匹配,并且在正则之前。
location ~ pattern 开头表示区分大小写的正则匹配
location ~* pattern 开头表示不区分大小写的正则匹配
location /uri 不带任何修饰符,也表示前缀匹配,但是在正则匹配之后
location / 通用匹配,任何未匹配到其它 location 的请求都会匹配到,相当于 switch 中的 default

前缀匹配时,Nginx 不对 url 做编码,因此请求为 /static/20%/aa,可以被规则 ^~ /static/ /aa 匹配到(注意是空格)

多个 location 配置的情况下匹配顺序为:

  • 首先精确匹配 =
  • 其次前缀匹配 ^~
  • 其次是按文件中顺序的正则匹配
  • 然后匹配不带任何修饰的前缀匹配。
  • 最后是交给 / 通用匹配
  • 当有匹配成功时候,停止匹配,按当前匹配规则处理请求

意:前缀匹配,如果有包含关系时,按最大匹配原则进行匹配。比如在前缀匹配:location /dir01location /dir01/dir02,如有请求 http://localhost/dir01/dir02/file 将最终匹配到 location /dir01/dir02

例子,有如下匹配规则:

location = / {
   echo "规则 A";
}
location = /login {
   echo "规则 B";
}
location ^~ /static/ {
   echo "规则 C";
}
location ^~ /static/files {
    echo "规则 X";
}
location ~ \.(gif|jpg|png|js|css)$ {
   echo "规则 D";
}
location ~* \.png$ {
   echo "规则 E";
}
location /img {
    echo "规则 Y";
}
location / {
   echo "规则 F";
}

那么产生的效果如下:

  • 访问根目录 /,比如 http://localhost/ 将匹配 规则 A
  • 访问 http://localhost/login 将匹配 规则 Bhttp://localhost/register 则匹配 规则 F
  • 访问 http://localhost/static/a.html 将匹配 规则 C
  • 访问 http://localhost/static/files/a.exe 将匹配 规则 X,虽然 规则 C 也能匹配到,但因为最大匹配原则,最终选中了 规则 X。你可以测试下,去掉规则 X ,则当前 URL 会匹配上 规则 C
  • 访问 http://localhost/a.gif, http://localhost/b.jpg 将匹配 规则 D规则 E ,但是 规则 D 顺序优先,规则 E 不起作用,而 http://localhost/static/c.png 则优先匹配到 规则 C
  • 访问 http://localhost/a.PNG 则匹配 规则 E ,而不会匹配 规则 D ,因为 规则 E 不区分大小写。
  • 访问 http://localhost/img/a.gif 会匹配上 规则 D, 虽然 规则 Y 也可以匹配上,但是因为正则匹配优先,而忽略了 规则 Y
  • 访问 http://localhost/img/a.tiff 会匹配上 规则 Y

访问 http://localhost/category/id/1111 则最终匹配到规则 F ,因为以上规则都不匹配,这个时候应该是 Nginx 转发请求给后端应用服务器,比如 FastCGI(php),tomcat(jsp),Nginx 作为反向代理服务器存在。

理解 Nginx 中 Server 和 Location 的匹配逻辑

1.3 nginx 日志

Nginx 日志主要有两种:access_log(访问日志) 和 error_log(错误日志)。

1.3.1 access_log 访问日志

access_log 主要记录客户端访问 Nginx 的每一个请求,格式可以自定义。通过 access_log 你可以得到用户地域来源、跳转来源、使用终端、某个 URL 访问量等相关信息。

nginx log 文件默认地址 /var/log/nginx/;

log_format 指令用于定义日志的格式,语法: log_format name string; 其中 name 表示格式名称,string 表示定义的格式字符串。log_format 有一个默认的无需设置的组合日志格式。

默认的无需设置的组合日志格式

log_format combined '$remote_addr - $remote_user  [$time_local]  '
                    ' "$request"  $status  $body_bytes_sent  '
                    ' "$http_referer"  "$http_user_agent" ';

access_log 指令用来指定访问日志文件的存放路径(包含日志文件名)、格式和缓存大小,语法:access_log path [format_name [buffer=size | off]]; 其中 path 表示访问日志存放路径,format_name 表示访问日志格式名称,buffer 表示缓存大小,off 表示关闭访问日志。

log_format 使用示例:在

首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇 IDEA如何使用Maven不通过模板创.. 下一篇关于在若依平台中建立树形结构无..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目