• nginx基础


    命令

    windiws启动nginx命令:start nginx

    sudo nginx #打开 nginx
    nginx -s reload|reopen|stop|quit  #重新加载配置|重启|停止|退出 nginx
    nginx -t   #测试配置是否有语法错误
    
    nginx [-?hvVtq] [-s signal] [-c filename] [-p prefix] [-g directives]
    
    -?,-h           : 打开帮助信息
    -v              : 显示版本信息并退出
    -V              : 显示版本和配置选项信息,然后退出
    -t              : 检测配置文件是否有语法错误,然后退出
    -q              : 在检测配置文件期间屏蔽非错误信息
    -s signal       : 给一个 nginx 主进程发送信号:stop(停止), quit(退出), reopen(重启), reload(重新加载配置文件)
    -p prefix       : 设置前缀路径(默认是:/usr/local/Cellar/nginx/1.2.6/-c filename     : 设置配置文件(默认是:/usr/local/etc/nginx/nginx.conf)
    -g directives   : 设置配置文件外的全局指令

    配置

    在配置Nginx服务的时候,可以给不同的uri访问指向不同的位置,例如下面的配置:

    server {
           listen       80;
           server_name  www.xx.com;
    
           location / {
              root   D:/www;      #定义默认根目录位置(windows系统)
              index index.php index.html index.htm;   #定义首页索引文件的名称
           }
     
           location /abc {
              root   D:/files/xx;      #定义其他请求的根目录位置(windows系统)
              index index.php index.html index.htm;   #定义首页索引文件的名称
           }
    }

    这里的默认路径没有问题,而/abc这个路径要想正常访问,在“D:/files/xx”目录下还需要有一个abc目录,否则会抛出404异常

    location

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

    • = 开头表示精确匹配

    • ^~ 开头表示uri以某个常规字符串开头,理解为匹配 url路径即可。nginx不对url做编码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa匹配到(注意是空格)。以xx开头

    • ~ 开头表示区分大小写的正则匹配                     以xx结尾

    • ~* 开头表示不区分大小写的正则匹配                以xx结尾

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

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

    匹配模式及顺序

    匹配字符串分为两种:普通字符串(literal string)和正则表达式(regular expression),其中 ~ 和 ~* 用于正则表达式, 其他前缀和无任何前缀都用于普通字符串。

    匹配顺序是:

    1、先匹配普通字符串,将最精确的匹配暂时存储;

    2、然后按照配置文件中的声明顺序进行正则表达式匹配,只要匹配到一条正则表达式,则停止匹配,取正则表达式为匹配结果;

    3、如果所有正则表达式都匹配不上,则取1中存储的结果;

    4、如果普通字符串和正则表达式都匹配不上,则报404 NOT FOUND。

    location   =   /uri         =开头表示精确前缀匹配,只有完全匹配才能生效。

    location   ^~   /uri        ^~开头表示普通字符串匹配上以后不再进行正则匹配。

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

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

    location   /uri                  不带任何修饰符,表示前缀匹配。

    location   /                       通用匹配,任何未匹配到其他location的请求都会匹配到。

    注意:正则匹配会根据匹配顺序,找到第一个匹配的正则表达式后将停止搜索。普通字符串匹配则无视顺序,只会选择最精确的匹配。

    首先精确匹配 =-》其次以xx开头匹配^~-》然后是按文件中顺序的正则匹配-》最后是交给 / 通用匹配。当有匹配成功时候,停止匹配,按当前匹配规则处理请求。

    例子,有如下匹配规则:

    location = / {
       #规则A
    }
    location = /login {
       #规则B
    }
    location ^~ /static/ {
       #规则C
    }
    location ~ .(gif|jpg|png|js|css)$ {
       #规则D,注意:是根据括号内的大小写进行匹配。括号内全是小写,只匹配小写
    }
    location ~* .png$ {
       #规则E
    }
    location !~ .xhtml$ {
       #规则F
    }
    location !~* .xhtml$ {
       #规则G
    }
    location / {
       #规则H
    }

    那么产生的效果如下:

    访问根目录/, 比如http://localhost/ 将匹配规则A

    访问 http://localhost/login 将匹配规则B,http://localhost/register 则匹配规则H

    访问 http://localhost/static/a.html 将匹配规则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/a.xhtml 不会匹配规则F和规则G,

    http://localhost/a.XHTML不会匹配规则G,(因为!)。规则F,规则G属于排除法,符合匹配规则也不会匹配到,所以想想看实际应用中哪里会用到。

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

  • 相关阅读:
    判断分流使用
    Mac系统如何显示隐藏文件?
    Brew安装的软件查询安装位置
    JetBrains 产品线破解方法
    Linux查看与挂载新磁盘
    对BRD、MRD、PRD、FSD四类产品文档的理解
    网站收藏
    收藏
    官方文档
    java 的访问权限控制
  • 原文地址:https://www.cnblogs.com/grasp/p/12357590.html
Copyright © 2020-2023  润新知