Nginx的location详解

location的作用是根据用户请求的URI来执行不同的应用。

官方提供的常见的location匹配语法:

location [ = | ~ | ~* | ^~ ] uri {

... ...

}

URI部分是关键,这个URI可以是普通的字符串地址路径,或者是正则表达式,匹配成功则执行后面大括号里的相关指令。

正则表达式的前面还可以有"~"或"~*"等特殊字符。

对location语法列表说明:

+--------+----------------------------+--------------+---------------------------------+

|location |          [=|~|~*^~|@]          |         uri         |                       {...}                      |

+--------+----------------------------+--------------+---------------------------------+

|  指令     |   匹配标识                           |匹配的网站地址|    匹配URI后要执行的配置段    |

+--------+----------------------------+--------------+---------------------------------+

~用于区分大小写(大小写敏感)的匹配;

~*用于不区分大小写的匹配;

!对匹配结果进行取反;

^~用来在进行常规的字符串匹配检查之后,不做正则表达式的检查,即如果最明确的那个字符串匹配的location配置有此前缀,那么不做正则表达式的匹配。

location匹配示例:

location = / {          #当用户请求/时,将会匹配。

[ configueration A ]

}

location / {            #当用户请求/index.html时,将会匹配。

[ configueration B ]

}

location /document/ {   #当用户请求/document/doc.html时,将会匹配。

[ configueration C ]

}

location ^~/images/ {   #当用户请求/images/1.gif时,将会匹配。

[ configueration D ]

}

location ~* \.(gif|jpg|jpeg)$ {    #当用户请求/document/1.jpg时,将会匹配。

[ configueration E ]

}

location匹配实战:

server {

listen       192.168.30.3;

server_name  www.smartbro.com smart.com;

location / {

root   html/www;

index  index.html index.htm;

}

location = / {

root html/www;

index test01.html;

}

location /doc/ {

root html/www;

index test02.html;

}

location ^~ /images/ {

root html/www;

index test03.html;

}

access_log logs/access_www.log main;

}

echo ‘test01‘ > /application/nginx/html/www/test01.html    #创建文件

echo ‘test02‘ > /application/nginx/html/www/test02.html

echo ‘test03‘ > /application/nginx/html/www/test03.html

mkdir /application/nginx/html/www/doc    #创建目录

mv /application/nginx/html/www/test02.html /application/nginx/html/www/doc       #移动文件

ll /application/nginx/html/www/doc

total 4.0K

-rw-r--r-- 1 root root 7 Aug 11 17:01 test02.html    #创建目录

mkdir /application/nginx/html/www/images

mv /application/nginx/html/www/test03.html /application/nginx/html/www/images/     #移动文件

ll /application/nginx/html/www/images/

total 4.0K

-rw-r--r-- 1 root root 7 Aug 11 17:22 test03.html

/application/nginx/sbin/nginx -t       #检查语法

nginx: the configuration file /application/nginx-1.13.4//conf/nginx.conf syntax is ok

nginx: configuration file /application/nginx-1.13.4//conf/nginx.conf test is successful

/application/nginx/sbin/nginx -s reload     #平滑重启Nginx

测试访问:

curl http://192.168.30.3

test01

curl http://192.168.30.3/doc/

test02

curl http://192.168.30.3/images/

test03

--------------------------------------------------------------------------------------------------

Nginx rewrite:

--------------------------------------------------------------------------------------------------

主要实现URL地址的重写。Nginx软件的rewrite功能由pcre软件的支持,就是通过Perl兼容正则表达式语法进行规则匹配。

默认的参数编译的时候会安装支持rewrite的模块,但是必须要有pcre的支持。

rewrite 语法:

rewrite regex replacement [flag];

默认值:none

应用位置:server location if

rewrite是实现URL重写的关键指令。

根据正则表达式的部分定向到placement部分,结束时flag标记。

regex常用表达式说明:

+---------------------------------------------------------------------------------------------------------------------+

|  \    |将后面接着的字符标记为特殊字符或一个原义字符或一个向后引用                                                                   |

+---------------------------------------------------------------------------------------------------------------------+

|  ^    |匹配输入字符串的起始位置,如果设置了RegExp对象的Multiline属性,^也匹配“\n”或“\r”之后的位置    |

+---------------------------------------------------------------------------------------------------------------------+

|  $    |匹配输入字符串的结束位置,如果设置了RegExp对象的Multiline属性,$也匹配“\n”或“\r”之前的位置     |

+---------------------------------------------------------------------------------------------------------------------+

|  *    |匹配前面的字符零次或多次                                                                                                                             |

+---------------------------------------------------------------------------------------------------------------------+

|  +    |匹配前面的字符一次或多次                                                                                                                            |

+---------------------------------------------------------------------------------------------------------------------+

|  ?      |匹配前面的字符零次或一次,例如do(es)?既可以匹配do也可以匹配does中的do,等价于{0,1}。当该字          |

|          |符紧跟在任何一个其他的限制符(*  +?  {n}  {n,m})后面时,匹配模式是非贪婪模式的,非贪婪模式                  |

|     |会尽可能少的匹配所搜索的字符串,而默认的贪婪模式则会尽可能多的匹配所搜索的字符串,例如对于           |

|     |字符串“oooo”,使用“o+?”会匹配单个字符o,而使用“o+”将会匹配所有的o                                      |

+---------------------------------------------------------------------------------------------------------------------+

|  .       |匹配除去“\n”之外的任何单个字符,要匹配包括“\n”在内的任何字符,请使用“[.\n]”这样的模式           |

+---------------------------------------------------------------------------------------------------------------------+

|(pattern)  |匹配括号内的pattern,并可以在后面获取对应的匹配,常用$0...$9属性获取小括号中匹配的内容            |

|                |要匹配圆括号,使用“\(\)”                                                                                                                  |

+---------------------------------------------------------------------------------------------------------------------+

rewrite指令flag参数标记的说明:

+--------------------------------------------------------------------------------------------------+

|   last   |   本条规则匹配完成后,继续向下匹配新的location URI规则                                           |

+--------------------------------------------------------------------------------------------------+

|   break  |   本条规则匹配及完成终止,不在继续匹配后面的任何规则                                            |

+--------------------------------------------------------------------------------------------------+

| redirect |   返回302临时重定向,浏览器地址栏会显示跳转后的URL地址                                     |

+--------------------------------------------------------------------------------------------------+

| permanent|   返回301永久重定向,浏览器地址栏会显示跳转后的URL地址                                 |

+--------------------------------------------------------------------------------------------------+

在flag标记中,last和break用来实现URL重写,浏览器地址栏的URL地址不变,但在服务器访问的应用程序和路径发生了变化。

redirect和permanent用来实现URL跳转,浏览器地址栏会显示跳转后的URL地址。

last和break标记实现的功能差不多一样,但是在使用alias指令时必须使用last标记,使用proxy_pass指令时要使用break标记。

last标记在本条rewrite规则执行完毕后,会对其所在的server{...}标签重新发起请求,而break标记会在本条规则匹配完成,终止匹配。

Nginx rewrite的企业应用场景:

--为了让搜索引擎收录网站的内容,并让用户体验更好,企业会将动态URL地址伪静态处理,以提供服务。

--网站换成新的域名后,让旧的域名访问跳转到新的域名上,例如京东的360buy换成jd.com。

--根据特殊变量、目录、客户端的信息进行URL跳转。

Nginx rewrite 301 跳转:

除了使用别名的方式访问同一个网站,还可使用301跳转的方式实现。

vim /application/nginx/extra/www.conf

server {

listen       192.168.30.3;

server_name  smartbro.com;

location / {

root   html/www;

index  index.html index.htm;

}

rewrite ^/(.*) http://www.smartbro.com/$1 permanent;  #当访问smartbro.com下面的所有内容的时候都会跳转到www.smartbro.com

access_log logs/access_www.log main;

}

实现不同的域名的URI跳转:

vim /application/nginx/extra/www.conf

server {

listen       192.168.30.3;

server_name  www.smartbro.com;

location / {

root   html/www;

index  index.html index.htm;

}

if ( $http_host ~* "^(.*)\.smartbro\.com$" ) {      #设置跳转语句,不区分大小写的正则匹配

set $domain $1;

rewrite ^(.*) http://www.smartbri.com/$domain/index.html break;

}

access_log logs/access_www.log main;

}

/application/nginx/sbin/nginx -t

nginx: the configuration file /application/nginx-1.13.4//conf/nginx.conf syntax is ok

nginx: configuration file /application/nginx-1.13.4//conf/nginx.conf test is successful

/application/nginx/sbin/nginx -s reload

添加hosts解析:

vim /etc/hosts

192.168.10.3 www.smartbro.com bbs.smartbro.com pan.smartbro.com smartbro.com

使用浏览器访问测试:

curl http://smartbro.com

Welcome to pan.smartbro.com

curl http://www.smartbro.com

Welcome to pan.smartbro.com

时间: 2024-10-03 14:56:04

Nginx的location详解的相关文章

06 nginx Location详解之精准匹配

一:Location详解之精准匹配 location 语法 location 有”定位”的意思, 根据Uri来进行不同的定位. 在虚拟主机的配置中,是必不可少的,location可以把网站的不同部分,定位到不同的处理方式上. 比如, 碰到.php, 如何调用PHP解释器?  --这时就需要location location 的语法 location [=|~|~*|^~] patt { } 中括号可以不写任何参数,此时称为一般匹配 也可以写参数 因此,大类型可以分为3种 location = p

Nginx配置文件nginx.conf中文详解(转)

######Nginx配置文件nginx.conf中文详解##### #定义Nginx运行的用户和用户组 user www www; #nginx进程数,建议设置为等于CPU总核心数. worker_processes 8; #全局错误日志定义类型,[ debug | info | notice | warn | error | crit ] error_log /usr/local/nginx/logs/error.log info; #进程pid文件 pid /usr/local/nginx

Nginx配置文件优化详解

Nginx配置文件优化详解 对nginx进行优化是重点也是难点,这里给出一些常用的优化措施,以及相关参数的所代表的意思.有些参数需要结合公司服务器进行设置. 全局变量的优化: #定义Nginx运行的用户和用户组user  www  www: #启动进程,通常设置成和cpu的数量相等 worker_processes  8: #为每个进程分配cpu. worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 

快速部署Python应用:Nginx+uWSGI配置详解

快速部署Python应用:Nginx+uWSGI配置详解 相比于PHP,Python应用的部署很麻烦,比较常用的方法有fcgi与wsgi,然而这两种都很让人头痛.文章介绍了Nginx+uwsgi的简便方法,来快速的部署Python应用. AD: 在PHP里,最方便的就是deployment了,只要把php文件丢到支持PHP的路径里面,然后访问那个路径就能使用了:无论给主机添加多少PHP应用,只要把目录改好就没你的事了,完全不用关心php-cgi运行得如何,deployment极为方便. 反观Py

Nginx配置文件nginx.conf中文详解(转载)

请参考:http://wiki.nginx.org/Main #定义Nginx运行的用户和用户组 user www www; #nginx进程数,建议设置为等于CPU总核心数. worker_processes 8; #全局错误日志定义类型,[ debug | info | notice | warn | error | crit ] error_log ar/loginx/error.log info; #进程文件 pid ar/runinx.pid; #一个nginx进程打开的最多文件描述符

nginx学习三 nginx配置项解析详解及代码实现

nginx配置项解析详解及代码实现 0回顾 在上一节,用nginx简单实现了一个hello world程序:当我们在浏览器中输入lochost/hello ,浏览器就返回:hello world.为什么会这样呢,简单一点说就是当我们请求访问hello这个服务,nginx就会看配置文件中是否有,如果有,根据具体的handler处理后把处理的结果返回给用户,没有就返回not found. location /hello { test_hello ;//无参数的配置 这其实是一个简单的配置.这节我们来

Nginx 安装与详解

nginx简介 nginx是一个开源的,支持高性能,高并发的www服务和代理服务软件.它是一个俄罗斯人lgor sysoev开发的,作者将源代码开源出来供全球使用.nginx比它大哥apache性能改进许多,nginx占用的系统资源更少,支持更高的并发连接,有更高的访问效率.nginx不但是一个优秀的web服务软件,还可以作为反向代理,负载均衡,以及缓存服务使用.安装更为简单,方便,灵活. 优点 支持高并发,能支持几万并发连接 资源消耗少,在3万并发连接下开启10个nginx线程消耗的内存不到2

Nginx 配置文件nginx.conf中文详解

1 ######Nginx配置文件nginx.conf中文详解##### 2 3 #定义Nginx运行的用户和用户组 4 user www www; 5 6 #nginx进程数,建议设置为等于CPU总核心数. 7 worker_processes 8; 8 9 #全局错误日志定义类型,[ debug | info | notice | warn | error | crit ] 10 error_log /usr/local/nginx/logs/error.log info; 11 12 #进

Nginx 核心配置详解

目录 Nginx 核心配置详解 Nginx 四层访问控制: Nginx账户认证功能: 自定义错误页面: 自定义访问日志: 检测文件是否存在: 长连接配置: 作为下载服务器配置: 作为上传服务器: 其他配置: Nginx 核心配置详解 Nginx 四层访问控制: 准备两个客户端,做访问测试使用. centos7 IP:192.168.39.7 centos6 IP:192.168.39.6 [[email protected] images1]#vim /apps/nginx/conf/conf.