rewrite 功能
实现URL地址改写
语法:
rewrite regex replacement [flag];
flag标记:
last: 完成重写后,重写后的,把重写后的地址,再次发给nginx服务器,如果被rewrite匹配到,又会改写
break: 一旦此rewrite规则重写完成之后,就直接进行后续处理
![](https://box.kancloud.cn/3cf3c5ee9d30455c0888453498a81244_636x150.png)
redirect: 将重写后的URI返回给客户端,状态码为302,指明临时重定向
permanent:
if (!-e $request_filename) {
rewrite ^/(.*)$ /index.php/$1 last;
}
案例:
1)
location ^~ /images/ {
root /vhosts;
rewrite ^/images/(.*\.png)$ /imgs/$1 break;
}
2) 域名跳转
server {
listen 80;
server_name www.myweb.com;
root /vhosts/web2/;
}
server {
listen 80;
server_name www.a.com;
rewrite ^/ http://www.myweb.com/ break;
location / {
root "/vhosts/web1";
}
当客户端访问www.a.com 浏览器会直接跳转到www.myweb.com
server {
listen 80;
server_name www.a.com mall.a.com;
if ($http_host ~* ^(.*)\.a\.com$)
{
rewrite ^(.*) http://www.myweb.com$1;
break;
}
当客户端访问http://www.a.com/images/svn.png URL被nginx服务器重写成http://www.myweb.com/images/svn.png
3) 镜像
![](https://box.kancloud.cn/4027c6fd742dcda3bb7287bce76dd7b1_619x387.png)
4)当访问http://bbs.a.com/ 时跳转到http://www.a.com/bbs/
server {
listen 80;
server_name bbs.a.com;
location / {
if ( $http_host ~* "^(.*)\.a\.com" ) {
rewrite ^/(.*)$ http://www.a.com/$1 permanent;
}
}
}
二)指令
1)if指令
该指令用来支持条件判断,并根据条件判断结果选择不同的nginx配置
if (condition) { ... }
condition: 为判断条件,有如下设置方式
a:变量名
if ($slow) {
limit_rate 10k;
}
if ($invalid_referer) {
return 403;
}
b:使用比较运输费(=,!=)
![](https://box.kancloud.cn/ce977d59e9a6e10a71f723158f4fbeeb_618x170.png)
c: 判断请求文件是否存在
-f 如果文件存在,if条件为true
-e如果请求目录或文件存在,if条件为true
-x如果请求文件有执行权限,if条件为true
![](https://box.kancloud.cn/440652411b35cfb06c8ffce539635c27_600x160.png)
三)Rewrite常用的全局变量
$args : #这个变量等于请求行中的参数,同$query_string
$content_length : 请求头中的Content-length字段。
$content_type : 请求头中的Content-Type字段。
$document_root : 当前请求在root指令中指定的值。
$host : 请求主机头字段,否则为服务器名称。
$http_user_agent : 客户端agent信息
$http_cookie : 客户端cookie信息
$limit_rate : 这个变量可以限制连接速率。
$request_method : 客户端请求的动作,通常为GET或POST。
$remote_addr : 客户端的IP地址。
$remote_port : 客户端的端口。
$remote_user : 已经经过Auth Basic Module验证的用户名。
$request_filename : 当前请求的文件路径,由root或alias指令与URI请求生成。
$scheme : HTTP方法(如http,https)。
$server_protocol : 请求使用的协议,通常是HTTP/1.0或HTTP/1.1。
$server_addr : 服务器地址,在完成一次系统调用后可以确定这个值。
$server_name : 服务器名称。
$server_port : 请求到达服务器的端口号。
$request_uri : 包含请求参数的原始URI,不包含主机名,如:”/foo/bar.php?arg=baz”。
$uri : 不带请求参数的当前URI,$uri不包含主机名,如”/foo/bar.html”。
$document_uri : 与$uri相同。
常用的正则
. 匹配除换行符以外的任意字符
? 重复0次或1次
+ 重复1次或多次
* 重复0次或多次
\d 匹配数字
^ 以什么开始
$ 以什么结束
{n} 重复n次
{n,} 至少重复n次
[c] 匹配单个字符
[a-z] 匹配所有小写字母
[[:alpha:]] [[:digist:]] [[:alnum:]] [[:space:]]
- 第一部分:Nginx Web服务
- 第一章: Nginx的初探
- 第二章:Nginx的安装部署
- 第一节:在centos6上通过Yum安装Nginx
- 第二节:在Centos7上通过Yum安装nginx
- 第三节:编译安装Nginx服务
- 第四节: Nginx编译参数详解
- 第五节: Nginx的启动脚本
- 第六节:Nginx的shell脚本安装
- 第七节:nginx服务的平滑升级
- 第三章:Nginx服务基础配置
- 第一节: 配置运行nginx服务器用户
- 第二节:配置运行生成的worker processes进程数
- 第三节:配置Nginx进程PID存放路径
- 第四节:定义MIME类型
- 第五节:自定义nginx的访问日志
- 第六节:主配置段(main)常用的配置
- 第七节:http段(核心)常用的配置命令
- 第八节:配置nginx中的location段
- 第九节: 基于IP的访问控制
- 第十节:基于用户的访问控制
- 第十一节:Nginx定义status状态页
- 第十二节:Nginx服务器Rewrite重写
- 第十三节:Nginx服务配置防盗链
- 第十四节:nginx软件的优点
- 第四章:Nginx服务器的优化配置
- 第一节:nginx.conf配置文件基本参数优化
- 第二节:fastcgi调优
- 第三节:Gzip调优
- 第四节:expires缓存调优
- 第五节:内核参数优化
- 第六节: Nginx之——413 修改上传文件大小限制
- 第五章:Nginx虚拟主机的配置
- 第一节:基于名称的虚拟主机
- 第二节:通过shell脚本添加虚拟主机
- 第六章:Nginx常用模块指令详解
- 第一节:ngx_http_realip_module
- 第二节:http_image_filter_module
- 第三节:tengine中配置consistent hash module
- 第四节:ngx_http_userid_module
- 第七章:Nginx服务器配置HTTPS访问
- 第八章: Nginx服务器日志切割
- 第二部分:Nginx负载均衡反向代理服务
- 第一章:Nginx进阶参数详解
- 第一节:proxy_module参数详解
- 第二节:upstream_module参数详解
- 第四章:Nginx反向代理服务
- 第一节:Nginx反向代理配置参数详解
- 第二节:Nginx反向代理服务配置案例
- 第三节:Nginx缓存
- 第四节: Nginx中fastcgi模块
- 第五节:nginx+fastcgi实现动静分离架构
- 第五章:Nginx负载均衡
- 第一节:ngx_http_upstream_module常见指令
- 第二节:调度方法
- 第三节:健康状态检查