在nginx的location下面匹配分为两类,普通匹配和正则匹配
普通匹配: location = URI { configuration } #精确匹配 location ^~ URI { configuration } #非正则匹配 location [space] URI { configuration} # # 前缀匹配 正则匹配 location ~ URI { configuration } #大小写敏感匹配 location ~* URI { configuration } #大小写不敏感匹配
nginx 正则表达式的语法:
nginx 关于正则表达的支持提供了自己的处理方案,设置了自己的语法,这就好比是自己写了一个脚本,来处理正则表达式的结果。比如,我用正则表达式从一个文本中匹配出来一个结果,那么问题来了,我还的对这个结果进行处理,以下的符号都是对正则表达式的处理符号,他们在功能式看似好像和正则沾边,但是不属于正则的范畴。可以理解为处理正则的脚本或函数。
牛逼学习链接:https://www.cnblogs.com/linjiqin/p/5532119.html
^~
^~ :标识符后面跟一个字符串。Nginx将在这个字符串匹配后停止进行正则表达式的匹配,如 location ^~ /images/,它在匹配了/images/这个字符串后就停止搜索其它正则的location
非正则匹配,匹配该规则后,停止继续正则匹配。
空格
前缀匹配,匹配后,继续更长前缀匹配和正则匹配。
=
标识精确查找地址,如 location = / ,只会匹配uri为/的请求
精确匹配,匹配后停止后续匹配,直接执行该匹配后的configuration.
~
区分大小写的匹配
区分大小写的正则匹配,按顺序匹配,一旦匹配上即停止后续匹配。
~*
不区分大小写的匹配
!~
对区分大小写的匹配取非
!^*
对不区分大小写的匹配取非
后面贴一个nginx配置文件中虚拟机中的server项
server { listen 80; server_name www.amber.com; #charset koi8-r; #access_log logs/host.access.log main; location / { # /是正则表达式, 下面的root,index是模块名字 #root html; #root目录指的是nginx安装目录/usr/local/nginx root /web/www.amber.com; #也可以在linux中定义一个绝对路径 index index.html index.htm; #auth_basic "secret"; #nginx的访问控制 #auth_basic_user_file /usr/local/nginx/passwd.db; } location ~ .php$ { #区分大小写 proxy_pass http://192.168.244.11:80; #proxy_pass是模块名字 } location ~ .(gif|jpg|jpeg|bmp|png|swf) { root html; } location ~ /status { stub_status on; access_log off; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }