location [ = | ~ | ~* | ^~ ] uri { ... }
用于实现从uri到文件系统的路径映射;ngnix会根据用户请求的URI来检查定义的所有location,并找出一个最佳匹配,而后应用其配置。
uri前符号说明
匹配优先级从高到低如下:
(location =) > (location 完整路径) > (location ^~ 路径) > (location ~/~* 路径) > (location 部分起始路径) > (/)
#示例:精确匹配doc目录下的一个文件名。 #1.nginx的配置文件如下: [root@nginx01 web1]# vim /etc/nginx/conf.d/virtualhost.conf server { listen 80; server_name www.nginx01.com; location / { root /data/nginx/html/web1; index index.html; } location = /file1.txt { root /data/nginx/html/web1/doc; index index.html; } } #2.重启nginx服务 [root@nginx01 web1]# nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful [root@nginx01 web1]# systemctl reload nginx.service #3.新建doc目录和file1.txt文件 [root@nginx01 web1]# mkdir doc [root@nginx01 web1]# echo "abc" > doc/file1.txt #4.客户端测试 [root@xuzhichao ~]# curl http://www.nginx01.com/file1.txt abc
#1.nginx的配置如下: [root@nginx01 web1]# vim /etc/nginx/conf.d/virtualhost.conf server { listen 80; server_name www.nginx01.com; location / { root /data/nginx/html/web1; index index.html; } location ~ /file1\.txt { root /data/nginx/html/web1/doc; index index.html; } } #2.重启nginx服务 [root@nginx01 web1]# systemctl reload nginx.service #3.在doc下新建文件 [root@nginx01 web1]# echo "qwe" > doc/file1.TXT [root@nginx01 web1]# tree doc/ doc/ ├── file1.txt └── file1.TXT #4.客户端如果访问File1.txt或file.TXT,则无法匹配到location ~ /file1.txt语句块 [root@xuzhichao ~]# curl http://www.nginx01.com/file1.txt abc [root@xuzhichao ~]# curl http://www.nginx01.com/file1.TXT <html> <head><title>404 Not Found</title></head> <body> <center><h1>404 Not Found</h1></center> <hr><center>nginx/1.20.1</center> </body> </html>
对用户的请求的uri做模糊匹配,不区分大小写,无论是大写,小写还是大小写混合都会匹配,但是需要有对应的资源(大写,小写,大小写混合)才能访问成功。此模式通常用于匹配用户的静态资源。
#1.nginx的配置文件如下: root@nginx01 web1]# vim /etc/nginx/conf.d/virtualhost.conf server { listen 80; server_name www.nginx01.com; location / { root /data/nginx/html/web1; index index.html; } location ~* /file1\.txt { root /data/nginx/html/web1/doc; index index.html; } } #2.doc下的文件如下: [root@nginx01 web1]# tree doc/ doc/ ├── file1.txt └── file1.TXT #3.重启nginx服务 [root@nginx01 web1]# systemctl reload nginx.service #4.在客户端测试访问file1.txt和file1.TXT [root@xuzhichao ~]# curl http://www.nginx01.com/file1.TXT qwe [root@xuzhichao ~]# curl http://www.nginx01.com/file1.txt abc
#1.nginx的配置文件如下: [root@nginx01 ~]# vim /etc/nginx/conf.d/virtualhost.conf server { listen 80; server_name www.nginx01.com; location / { root /data/nginx/html/web1; index index.html; } location ^~ /doc { root /data/nginx/html/web1; index index.html; } location /doc1 { alias /data/nginx/html/web1; index index.html; } } #2.web1站点的目录结构如下: [root@nginx01 web1]# cat /data/nginx/html/web1/index.html www.nginx01.com [root@nginx01 web1]# cat /data/nginx/html/web1/doc/index.html doc.index #3.重启nginx服务 [root@nginx01 web1]# systemctl reload nginx.service #4.客户端测试 [root@xuzhichao ~]# curl http://www.nginx01.com/doc1/ www.nginx01.com [root@xuzhichao ~]# curl http://www.nginx01.com/doc/ doc.index
#1.nginx的配置如下: [root@nginx01 ~]# cat /etc/nginx/conf.d/virtualhost.conf server { listen 80; server_name www.nginx01.com; location = / { default_type text/html; return 200 'location = /\n'; } location / { default_type text/html; return 200 'location /\n'; } location /doc/dir1 { default_type text/html; return 200 'location /doc/dir1\n'; } location ^~ /images { default_type text/html; return 200 'location ^~ /images\n'; } location /doc { default_type text/html; return 200 'location /doc\n'; } location ~* \.(jpg|gif|mp4)$ { default_type text/html; return 200 'location ~* \.(jpg|gif|mp4)\n'; } } #2.重启nginx服务 [root@nginx01 web1]# systemctl reload nginx.service #3.使用客户端访问不同的uri测试location的优先级 [root@xuzhichao ~]# curl http://www.nginx01.com/ location = / [root@xuzhichao ~]# curl http://www.nginx01.com/index.html location / [root@xuzhichao ~]# curl http://www.nginx01.com/doc location /doc [root@xuzhichao ~]# curl http://www.nginx01.com/doc/dir1 location /doc/dir1 [root@xuzhichao ~]# curl http://www.nginx01.com/doc/1.txt location /doc [root@xuzhichao ~]# curl http://www.nginx01.com/images/1.jpg location ^~ /images [root@xuzhichao ~]# curl http://www.nginx01.com/doc/1.jpg location ~* \.(jpg|gif|mp4) [root@xuzhichao ~]# curl http://www.nginx01.com/doc/dir1/1.jpg location ~* \.(jpg|gif|mp4)
#1.直接匹配网站根会加速nginx的访问处理 location / { ......; } #2.访问静态资源,不区分大小写 location ~* \.(gif|jpg|jpeg|png|css|js|ico)$ { ......; } #3.精准匹配 location = /nginx_status { ......; } #4.区分大小写,匹配php资源 location ~ \.php$ { ......; } #5.多应用配置 location ~* /app1 { ......; } location ~* /app2 { ......; }