一、nginx的地址重写
1、地址跳转的应用场景
1)老域名和新域名
用户输入域名,网站自动跳转到新域名的网站服务器上
2)多域名网站集群
集群中网站服务器节点故障无法给用户提供服务
配置域名跳转到没有故障的服务器进行提供服务
3)业务端调整
访问老域名跳转到新公司网站
4)url访问更合理
调整域名
5)配置一个简单跳转(实现中英文网页的跳转)
[root@nginx /]# vim /usr/local/nginx/conf/nginx.conf
server {
listen 80;
server_name nginx.iso.com;
charset utf-8;
location / {
root /var/www/wordpress;
index index.html index.php;
}
}
server {
listen 80;
server_name nginx.zh.iso.com nginx.en.iso.com;
location / {
if ($http_host ~* "zh") {
set $language zh;
rewrite ^/$ http://nginx.iso.com/$language redirect;
}
if ($http_host ~* "en") {
set $language en;
rewrite ^/$ http://nginx.iso.com/$language redirect;
}
}
}
2、地址重写的原理
客户端访问nginx,nginx根据用户请求匹配正则表达式,匹配全局变量,判断是否需要跳转
若需要跳转,将跳转信息转发向nginx的ngx_http_modules模块进行地址重写
set负责将访问的域名进行修改,转发向目标服务器
3、跳转的方式和跳转配置的位置
1)跳转的方式
rewrite跳转
if全局变量跳转
location匹配后跳转
2)配置跳转的位置
server{}
if{}
location{}
3)跳转应用的方式
web服务器和web服务器之间跳转使用if和rewrite(server{}中)
web站点内部跳转使用location(rewrite和proxy_pass)
4)配置跳转对域名和字符串的实现方式
通过字符串配置跳转:使用if全局变量获取用户字符串
通过域名跳转:使用proxy_pass反向代理
4、地址重写格式和标记的方法
1)格式
Rewrite+正则表达式+跳转的内容+rewrite标记
2)rewrite标记的方法
last:匹配完成后停止
break:本条匹配成功后不在匹配其他正则表达式
Redirecd:临时重定向,用于维护系统使用,代码为302
Permanent:永久重定向,代码为301
5、location的类型和优先级
1)类型和常见的正则表达式
精准匹配 Location = patt {}
一般匹配 Location patt {}
正则匹配 Location ~ patt {}
~ 执行一个正则匹配,区分大小写
~* 执行一个正则匹配,不区分大小写
!~ 执行一个正则匹配,区分大小写不匹配
!~* 执行一个正则匹配,不区分大小写不匹配
^~ 普通字符匹配;使用前缀匹配。如果匹配成功,则不再匹配其他location
= 普通字符精确匹配。也就是完全匹配
2)正则表达式的元符号
字符 说 明
^ 匹配输入字符串的起始位置
$ 匹配输入字符串的结束位置
* 匹配前面的字符零次或多次
+ 匹配前面的字符一次或多次
? 匹配前面的字符零次或一次
. 匹配除“\n”之外的任何单个字符。使用诸如“[.\n]”之类的模式,可匹配包括“\n”在内的任意字符
\ 将后面接着的字符标记为一个特殊字符或一个原义字符或一个向后引用
\d 匹配纯数字
{n} 重复n次
{n,} 重复n次或更多次
[c] 匹配单个字符c
[a-z] 匹配a-z小写字母的任意一个
[a-zA-Z] 匹配a-z小写字母或A-Z大写字母的任意一个
3)优先级
匹配某个具体文件
(location = 完整路径) > (location ^~ 完整路径) > (location ~* 完整路径) > (location ~ 完整路径) > (location 完整路径) > (location /)
用目录做匹配访问某个文件
(location = 目录) > (location ^~ 目录) > (location ~ 目录) > (location ~* 目录) > (location 目录) > (location /)
6、rewrite和location
1)相同点
都能实现跳转
2)不同点
rewrite是在同一类或两类域名更改获取资源的路径
location是对一类路径做控制访问或反向代理,还可以使用proxy_pass到其他机器
3)rewrite的执行顺序
执行server块里面的rewrite指令
执行location匹配
执行选定的location中的rewrite指令
二、配置地址重写(例子)
1、配置网址跳转(用户输入nginx.iso.com跳转到media.iso.com)
[root@nginx ~]# vim /usr/local/nginx/conf/nginx.conf
server {
listen 80;
server_name nginx.iso.com;
charset utf-8;
root /var/www/wordpress;
location / {
if ($host = "nginx.iso.com") {
rewrite ^/(.*)$ http://media.iso.com/$1 permanent;
}
}
}
2、配置客户端带参数跳转(通过访问tes.iso.com/100-100|200-*.html 转化到nginx.iso.com中)
server {
listen 80;
server_name nginx.iso.com;
location / {
root /var/www/wordpress;
index index.html;
}
}
server {
listen 80;
server_name test.iso.com;
location / {
if ( $request_uri ~ ^/100-(100|200)-(\d+).html$ ) {
rewrite (.*) http://nginx.iso.com permanent;
}
}
}