Nginx

Posted 小企鹅推雪球!

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx相关的知识,希望对你有一定的参考价值。

location 配置块

  1. location 配置块用来配置匹配的不同请求 URL 的处理方式

    http 
        #...
        server 
            listen       8080;
            #...
            location / 
                root   html;
                index  index.html index.htm;
            
            location /example1 
                // 匹配请求 URL 为 /example1 的请求
                // 在这里为该请求定义配置信息
            
            location /example2 
                proxy_pass http://localhost:8080/demo/mng/;
                proxy_cookie_path /demo /;
                proxy_set_header Host $host:$server_port;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_redirect ~^http://localhost:8080/demo/mng/(.*) https://www.demo.com/mng/$1;
                proxy_connect_timeout 4s;
                proxy_read_timeout 60s;
                proxy_send_timeout 8s;
            
        
        #...
    
    
  2. location 配置块只能在 server 配置块中配置

  3. location 指令的功能是用来匹配不同的 URI 请求,进而对请求做不同的处理和响应

  4. location 指令匹配 URI 类型,有四种参数可选,例如

    location [ = | ~ | ~* | ^~ ] /URI 
        # ...
    
    
  5. 空:location 后没有参数直接跟着标准 URI,表示前缀匹配,代表跟请求中的 URI 从头开始匹配

  6. =:用于标准 URI 前,要求请求字符串与其精准匹配,成功则立即处理,nginx 停止搜索其他匹配

  7. ^~:用于标准URI前,并要求一旦匹配到就会立即处理,不再去匹配其他的那些个正则 URI,一般用来匹配目录

  8. ~:用于正则 URI 前,表示 URI 包含正则表达式,区分大小写

  9. ~*:用于正则 URI 前,表示 URI 包含正则表达式,不区分大小写

  10. @用来定义一个命名location。主要用于内部重定向,不能用来处理正常的请求

    location @/name/ 
        # ...
    
    
  11. @ 定义一个命名的 location,@ 定义的 location 名字一般用在内部定向例如:error_page、try_files

    location / 
        try_files $uri $uri/ @custom
    
     
    location @custom 
        # ...do something
    
    
  12. 当尝试访问 url 找不到对应的文件就重定向到我们自定义的命名 location(此处为 custom),命名 location 中不能再嵌套其它的命名 location。

Nginx URL匹配顺序

  1. nginx 用两层指令匹配请求URL,

  2. 第一层匹配:使用server指令,通过域名,ip和端口来做第一层匹配,当找到匹配的 server 后就进入此 server 的 location 匹配。

  3. 第二层:location 的匹配并不完全按照其在配置文件中出现的顺序来匹配,请求 URI 会按如下规则进行匹配:

    1. 先精准匹配 = , 精准匹配成功则会立即停止其他类型的匹配
    2. 没有精准匹配成功时,进行前缀匹配。先查找带有 ^~ 的前缀匹配,带有 ^~ 的前缀匹配成功则立即停止其他类型匹配
    3. 前缀匹配未成功,再进行普通前缀匹配(不带参数 ^~ )成功则会暂存,继续查找正则匹配
    4. = 和 ^~ 均未匹配成功前提下,查找正则匹配 ~ 和 ~* 。当同时有多个正则匹配时,按其在配置文件中出现的先后顺序优先匹配,命中则立即停止其他类型匹配
    5. 所有正则匹配均未成功时,返回步骤(2)中暂存的普通前缀匹配(不带参数 ^~ )结果;
  4. 匹配规则优先级从高到低依次

    location =    # 精准匹配,优先级最高
    location ^~   # 带参前缀匹配
    location ~    # 正则匹配(区分大小写)
    location ~*   # 正则匹配(不区分大小写)
    location /a   # 普通前缀匹配,优先级低于带参数前缀匹配。
    location /    # 任何没有匹配成功的,都会匹配这里处理,优先级最低
    

location配置块指令

  1. proxy_pass指令用于设置代理服务器的映射地址,映射地址可以使用http或者https协议,映射地址可以使用域名,IP,以及可选的端口号

    例如:
    proxy_pass http://localhost:8080/demo/mng/;
    proxy_cookie_path;proxy_cookie_path path replacement;
    在单词 “unix” 之后指定并用冒号括起来的 UNIX 域套接字路径:
    proxy_pass http://unix:/tmp/backend.socket:/uri/;
    
  2. proxy_cookie_path指令用于改变cookie的路径

    语法
    proxy_cookie_path path replacement;
    path:是要替换的路径
    replacement:就是要替换的值
    
    样例
    location /example2 
    proxy_pass http://localhost:8080/demo/mng/;
    proxy_cookie_path /demo /;
    


```
3. proxy_connect_timeout指令定义与代理服务器建立连接的超时时间,注意:这个超时时间通常不能超过 75 秒

以上是关于Nginx的主要内容,如果未能解决你的问题,请参考以下文章

将 nginx rtmp 片段发送到 WebRTC

text 有用的nginx命令和片段

linux学习:Nginx--常见功能配置片段与优化-06

HLS NGINX-RTMP [错误] 1281#0:* 58 hls:强制片段拆分:10.002 秒

Nginx 跨域

Nginx配置文件详细介绍