• 06-Nginx配置详解


    目录

    请求定位

    资源访问

    修改配置文件

    创建目录

    创建文件

    路径匹配优先级

    优先级规则

    普通匹配

    长路径匹配

    正则匹配

    A、 区分大小写的正则匹配

    B、 不区分大小写的正则匹配 ~后跟上*号,表示这是不区分大小写的正则表达式。

    短路匹配

    精确匹配

    缓存配置

    http{}模块的缓存全局定义

    A、 proxy_cache_path

    B、 proxy_temp_path

    location{}模块的缓存局部定义

    A、 proxy_cache mycache

    B、 proxy_cache_key $host$request_uri$arg_age

    C、 proxy_cache_bypass    $arg_age

    D、proxy_cache_methods   GET HEAD

    E、 proxy_no_cache    $aaa $bbb $ccc

    F、 proxy_cache_purge    $ddd $eee $fff

    G、proxy_cache_lock   on

    H、proxy_cache_lock_timeout   5s

    I、 proxy_cache_valid    5s

    J、 proxy_cache_use_stale    http_404 http_500

    K、 expires    3m

    Nginx 变量

    A、 自定义变量

    B、 内置变量


    请求定位

    资源访问

    1. 修改配置文件

    1. 创建目录

    在真实目录中,必须要在 root 属性指定的目录下存在 location 指定的 URI 路径目录。所以需要在/opt/aaa 下创建 xxx/ooo 目录。

    1. 创建文件

    在/opt/aaa/xxx/ooo 目录下新建一个 myfile.txt 文件,文件内容为:this default page。

    再新建一个 hello.txt 文件,文件内容为:hello nginx world

        1. 路径匹配优先级

    1. 优先级规则

    优先级由低到高依次是:

    普通匹配 < 长路径匹配 < 正则匹配 < 短路匹配 < 精确匹配

    1. 普通匹配

    浏览器地址栏中的访问路径均为如下形式,不变。

    下面的匹配规则是:只要请求是以/xxx 开头的路径就可命中。

     

    1. 长路径匹配

    当一个请求路径既可以与一个长路径相匹配,又可以与一个短路径相匹配时,长路径优先级高。

    1. 正则匹配

    在正则匹配与普通匹配(长路径匹配也属于普通匹配)均可匹配上时,正则匹配的优先级高。

    A、 区分大小写的正则匹配

    ~表示这里是正则表达式,默认匹配是区分大小写的。

    在长路径匹配与正则匹配间,仍然是正则匹配的优先级要高于长路径匹配的,即使正则匹配的要短于长路径匹配的。


    当请求中的 XXX 写为大写字母,会报 404 找到资源。

     

    B、 不区分大小写的正则匹配
    ~后跟上*号,表示这是不区分大小写的正则表达式。

     


    当请求中的 XXX 写为大写字母时,依然可以访问。

    1. 短路匹配

    以^~开头的匹配路径称为短路匹配,表示只要匹配上,就不再匹配其它的了,即使是正则匹配也不再匹配了。即其优先级要高于正则匹配的。

     

    1. 精确匹配

    以等号(=)开头的匹配称为精确匹配,其是优先级最高的匹配。

        1. 缓存配置

    Nginx 具有很强大的缓存功能,可以对请求的response 进行缓存,起到类似CDN 的作用, 甚至有比 CDN 更强大的功能。同时,Nginx 缓存还可以用来“数据托底”,即当后台 web 服务

     

    器挂掉的时候,Nginx 可以直接将缓存中的托底数据返回给用户。此功能就是 Nginx 实现“服务降级”的体现。

    Nginx 缓存功能的配置由两部分构成:全局定义与局部定义。在 http{}模块的全局部分中进行缓存全局定义,在 server{}模块的各个 location{}模块中根据业务需求进行缓存局部定义。

    1. http{}模块的缓存全局定义

    A、 proxy_cache_path

    用于指定Nginx 缓存的存放路径及相关配置。

    B、 proxy_temp_path

    指定Nginx 缓存的临时存放目录。若 proxy_cache_path 中的use_temp_path 设置为了off, 则该属性可以不指定。

    1. location{}模块的缓存局部定义

    A、 proxy_cache mycache

    指定用于存放缓存 key 内存区域名称。其值为 http{}模块中 proxy_cache_path 中的

    keys_zone 的值。

    B、 proxy_cache_key $host$request_uri$arg_age

    指定Nginx 生成的缓存的key 的组成。

    C、 proxy_cache_bypass    $arg_age

    指定是否越过缓存。

    D、proxy_cache_methods   GET HEAD

    指定客户端请求的哪些提交方法将被缓存,默认为 GET 与HEAD,但不缓存 POST。

    E、 proxy_no_cache    $aaa $bbb $ccc

    指定对本次请求是否不做缓存。只要有一个不为 0,就不对该请求结果缓存。

    F、 proxy_cache_purge    $ddd $eee $fff

    指定是否清除缓存 key。

    G、proxy_cache_lock   on

    指定是否采用互斥方式回源。

    H、proxy_cache_lock_timeout   5s

    指定再次生成回源互斥锁的时限。

    I、 proxy_cache_valid    5s

    对指定的 HTTP 状态码的响应数据进行缓存,并指定缓存时间。默认指定的状态码为
    200,301,302。

    J、 proxy_cache_use_stale    http_404 http_500

    设置启用托底缓存的条件。而一旦这里指定了相应的状态码,则前面 proxy_cache_calid

    中指定的相应状态码所生成的缓存就变为了“托底缓存”。

    K、 expires    3m

    为请求的静态资源开启浏览器端的缓存。

    1. Nginx 变量

    A、 自定义变量


    由于Nginx 配置文件是 perl 脚本,所以其是可以使用如下方式自定义变量的。

    B、 内置变量

    Nginx 中已经内置定义了很多变量,这些变量的意义如下:

    $args

    $binary_remote_addr

    $body_bytes_sent

    $content_length

    $content_type

    $document_root

    $document_uri

    $host

    的服务器名;

    $http_cookie

    $http_referer

    $http_user_agent

    $http_via

    $http_x_forwarded_for

    $limit_rate

    $remote_addr

    $remote_port

    $remote_user

    $request

    请求中的参数;

    远程地址的二进制表示已发送的消息体字节数

    HTTP 请求信息里的"Content-Length" 请求信息里的"Content-Type"

    针对当前请求的根路径设置值与$uri 相同

    请求信息中的"Host",如果请求中没有 Host 行,则等于设置

    cookie 信息

    来源地址

    客户端代理信息

    最后一个访问服务器的 Ip 地址相当于网络访问路径。

    对连接速率的限制客户端地址

    客户端端口号

    客户端用户名,认证用用户请求信息

    $request_body

    $request_body_file

    $request_filename

    $request_method

    $request_uri

    $server_addr

    用户请求主体

    发往后端的本地文件名称当前请求的文件路径名

    请求的方法,比如"GET"、"POST"等请求的 URI,带参数

    服务器地址,如果没有用 listen 指明服务器地址,使用这个变

    量将发起一次系统调用以取得地址(造成资源浪费)

    $server_name                                   请求到达的服务器名

    $server_port                                   请求到达的服务器端口号

    $server_protocol                          请求的协议版本,"HTTP/1.0"或"HTTP/1.1"

    $uri                                                      请求的 URI,可能和最初的值有不同,比如经过重定向之类的

  • 相关阅读:
    Codeforces Round #788 (Div. 2)
    SSM框架之MyBatis入门(Maven工程实现全查功能,快速入门,适合小白)
    kafka集群部署
    FFmpeg常用命令行讲解及实战一
    Sass 最基础的语法
    如何使用ModSecurity WAF 来保护Windows IIS - 安装
    SpringBoot Mybatis 多数据源 MySQL+Oracle+Redis
    GO环境及入门案例
    docker学习(十三)docker安装dejavu
    MyBatis Plus实现动态字段排序
  • 原文地址:https://blog.csdn.net/xianghanscce/article/details/127896833