nginx location的详细使⽤
location:在一个server中location配置段可存在多个,用于实现从uri到文件系统的路径映射;ngnix会根据用户请求的URI来检查定义的所有location, 并找出一个最佳匹配(匹配的j location{}里的root,而不是server{}的root),而后应用其配置, location [ = | ~ | ~* | ^~ ] uri { ... } 允许根据用户请求的URI来匹配定义的各location,匹配到时,此请求将被相应的location块中的配置所处理。 1).location = / { [ configuration A ]} 请求“/”匹配配置A, 2).location / {[ configuration B ]} 请求“/index.html”匹配配置B, 3).location /documents/ {[ configuration C ]} 请求“/documents/document.html”,2和3都匹配,3更精确匹配配置C 4).location ^~ /images/ {[ configuration D ]} 请求“/images/1.gif”,2和4和5都匹配,根据优先匹配配置D, 5).location ~* \.(gif|jpg|jpeg)$ { [ configuration E ] } 请求“/documents/1.jpg”,2和3和5都匹配,5更精确匹配配置E, = #用于标准uri前,需要请求字串与uri精确匹配,如果匹配成功就停止向下匹配并立即处理请求。 (常用 ) ~ #用于标准uri前,表示包含正则表达式并且区分大小写,并且匹配 (常用 ) * #用于标准uri前,表示包含正则表达式并且代表任意长度的任意字符 ~* #用于标准uri前,表示包含正则表达式并且不区分大小写,并且任意字符匹配 (常用 ) !~ #用于标准uri前,表示包含正则表达式并且区分大小写,并且不匹配 !~* #用于标准uri前,表示包含正则表达式并且不区分大小写,并且不匹配 ^~ #用于标准uri前,表示包含正则表达式并且匹配以什么开头 ,URI左半部分匹配,不区分字符大小写。(常用 ) $ #用于标准uri前,表示包含正则表达式并且匹配以什么结尾 \ #用于标准uri前,表示包含正则表达式并且转义字符。可以转. * ?等 根 不带符号 匹配起始于此uri的所有的uri location优先级:(location =) > (location 完整路径) > (location ^~ 路径) > (location ~,~* 正 则顺序) > (location 部分起始路径) > (/)
常用正则表达式: 字符 描述 \ 将后面接着的字符标记为一个特殊字符或者一个原义字符或一个向后引用 ^ 匹配输入字符串的起始位置 $ 匹配输入字符串的结束位置 * 匹配前面的字符零次或者多次 + 匹配前面字符串一次或者多次 ? 匹配前面字符串的零次或者一次 . 匹配除“\n”(换行符)之外的所有单个字符 | 或 (pattern) 匹配括号内的pattern 生产案例:静态资源配置 location ^~ /static/ { root /data/nginx/ } #或者 location ~* \.(gif|jpg|jpeg|png|bmp|tiff|tif|css|js|ico)$ { root /data/nginx/static; } 动态资源配置 location ~ \.(php|jsp|asp) { root /data/nginx/dynamic; }
server { listen 80; server_name location.zjol.com.cn; charset utf-8; default_type text/html; location / { root /data/nginx/html/location; index index.html index.htm; } #静态资源配置 location ^~ /static/ { root /data/nginx/html; } #或者 #location ~* \.(gif|jpg|jpeg|png|bmp|tiff|tif|css|js|ico)$ { # root /data/nginx/html/static; # } #动态资源配置 location ~ \.(php|jsp|asp) { root /data/nginx/html/dynamic; } #精确匹配 location = /1.jpg { root /data/nginx/html/location; index index.html; } #如区分大小写则"只能"访问aa.jpg。 #对于不区分大小写的location,则可以访问任意大小写结尾的图片文件,不区分大小写则可以访问aa.jpg以外的资源比如Aa.JPG、aA.jPG这样的混合名 称文件,但是要求nginx服务器的资源目录有相应的文件,比如有Aa.JPG有aA.jPG # 区分大小写 #location ~ /A.?\.jpg { # 不区分大小写 location ~* /A.?\.jpg { index index.html; root /data/nginx/html/location; } }