博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Nginx地址重定向 return rewrite if
阅读量:2337 次
发布时间:2019-05-10

本文共 3717 字,大约阅读时间需要 12 分钟。

return指令

该指令一般用于对请求的客户端直接返回响应状态码。在该作用域内return后面的所有nginx配置都是无效的。 可以使用在server、location以及if配置中。 除了支持跟状态码,还可以跟字符串或者url链接。
return和rewrite的区别,个人觉得就是正则匹配的性能区别.

示例:如果访问的URL以".sh"或".bash"结尾,则返回403状态码

location ~ .*\.(sh|bash)?${return 403;rewrite /(.*) /abc/$1;  //该行配置不会被执行。}

返回字符串:

server{
listen 80;
server_name www.aming.com;
return 200 “hello”;
}
说明:如果要想返回字符串,必须要加上状态码,否则会报错。

跳转URL :

server{
listen 80;
server_name www.aming.com;
return 301 http://www.aminglinux.com/123.html;
}
注意:return后面的url必须是以http://或者https://开头的。

跳转URI

server{
listen 80;
server_name www.aming.com;
return 302 http://class.aming.com$request_uri;
}
在这里插入图片描述

rewrite 指令

使用nginx提供的全局变量或自己设置的变量,结合正则表达式和标志位实现url重写以及重定向

rewrite 语法格式

rewrite regex(正则) replacement flag (rewrite 源地址 目标地址)
flag: break last redirect permanent
last: last一般写在server和if中 停止执行其他重写规则,根据URI在server中继续搜索其他location
break:break一般使用在location url重写后,直接使用当前资源,不再执行location里余下的语句,完成本次请求
redirect:302临时重定向,地址栏改变,爬虫不更新URI
permanent:301永久重定向。地址栏改变,爬虫更新URI

总结:

使用last会对server标签重新发起请求,而break就直接使用当前的location中的数据源来访问,要视情况加以使用。一般在非根的location中配置rewrite,都是用的break;而根的location使用last比较好,因为如果配置了fastcgi或代理访问jsp文件的话,在根location下用break是访问不到。测试到rewrite有问题的时候,也不妨把这两者换换试试。

正则表达式匹配模式如下(操作符 模式匹配):

区分大小写匹配: ~
不区分大小写匹配: ~*
区分大小写不匹配 : !~
不区分大小写不匹配 : !~*

location表达式类型

~* 表示执行一个正则匹配,不区分大小写
^~ 表示普通字符匹配。使用前缀匹配。如果匹配成功,则不再匹配其他location。
= 进行普通字符精确匹配。也就是完全匹配。
@ 它定义一个命名的 location,使用在内部定向时,例如 error_page, try_files
@例
server {
listen 9090;
server_name localhost;
location / {
root html;
index index.html index.htm;
allow all;
}

error_page 404 = @fallback;    location @fallback {       proxy_pass http://www.baidu.com;   }

}

上述配置文件的意思是:如果请求的 URI 存在,则本 nginx 返回对应的页面;如果不存在,则把请求代理到baidu.com 上去做个弥补(注: nginx 当发现 URI 对应的页面不存在, HTTP_StatusCode 会是 404 ,此时error_page 404 指令能捕获它)。

location匹配优先级

精确匹配,只对匹配的目录或文件生效,对目录下的子文件不生效: = 优先级最高
不使用正则表达式匹配: ^~ 优先级第二
正则匹配第三 ~
路径匹配第四
默认匹配第五 location /

rewirte if 语句

if 语句最好放在location中使用
格式: if (判断条件) {
}

双目测试:

~  匹配为真!~ 不匹配为真= 等于为真!= 不等于为真~* 不区分大小写,匹配为真!~* 不区分大小写,不匹配为真

基于首页文件跳转

server {
listen 80;
server_name www.aaa.com;
location / {
index index.html index.htm;
rewrite /index.html /b.html break; #/index.html现有网站首页 /b.html 跳转到的网页
}

基于域名的地址重定向

输入aaa.com跳转到www.aaa.com
server {
listen 80;
server_name 9qifu.com;
rewrite ^/(.*)$ http://www.aaa.com/$1 permanent;
access_log off;
}

根据客户端浏览器进行重定向

server {       listen  80;       server_name   www.aaa.com;      location / {        root html;        index index.html index.htm;        if ($http_user_agent ~ Firefox) {      # $http_user_agent是客户端浏览器信息 ~ 匹配为真    		rewrite ^(.*)$ /firefox/$1 break;        #($1引用的变量是(.*)  必须要写break,不然死循环)		       }                    }       }

mkdir /application/nginx/html/firefox

vim /application/nginx/html/index.html
tail -f /application/nginx/logs/access.log #查看访问nginx信息其中有客户端浏览器信息

手机和pc端的分离

location / {     if ($http_user_agent ~* "android")      {	    proxy_pass http://andirod;  } if ($http_user_agent ~* "iphone") {	    proxy_pass http://iphone;}	  proxy_pass http://pc;	 }

改变音乐文件存储路径

server {
listen 80;
server_name www.aaa.com;
location / {
rewrite ^/(download/.)/media/(.)…*$ /$1/mp3/$2.mp3 break;
}
}

当访问地址不存在时地址重定向

server {
listen 80;
server_name www.aaa.com;
location / {
root html
index index.html index.htm;
if (!-e $request_filename){ #如果请求文件不存在
rewrite ^/ http://www.aaa.com/none.html
}
}
}

方法2

在location外面加入
server {
listen 80;
server_name www.aaa.com;
location / {
root html
index index.html index.htm;
}
error_page 403 /403.html; #跳转到指定页面
error_page 403 http://baidu.com; #跳转到指定页面
}

nginx限制http请求方法

$request_method 请求方法if ($request_method !~ ^(GET|HEAD|POST)$) {return 501}

查看rewrite日志

1 设置错误日志级别为 notice(nginx中最低级别的错误)
error /data/log/nginx/error.log notice;

2 开启rewrite日志

rewrite_log on;

转载地址:http://dzrpb.baihongyu.com/

你可能感兴趣的文章
数组heapify变为堆结构
查看>>
二叉树的非递归遍历
查看>>
218. The Skyline Problem
查看>>
Java PAT (Basic Level) Practice 写出这个数
查看>>
Python PAT (Basic Level) Practice 1016 部分A+B
查看>>
Python PAT (Basic Level) Practice 1006 换个格式输出整数
查看>>
Python PAT (Basic Level) Practice 1009 说反话
查看>>
Python PAT (Basic Level) Practice 1011 A+B 和 C
查看>>
Python PAT (Basic Level) Practice 1017 A除以B
查看>>
Python PAT (Basic Level) Practice 1042 字符统计
查看>>
spring dubbo 2.7.3 zookeeper 项目构建
查看>>
spring dubbo 报错
查看>>
如何在非 bean 对象中注入 dubbo service
查看>>
前后端分离 ajax java跨域配置 spring boot 、 spring security
查看>>
java spring boot 拦截所有请求 显示请求路径 方法 ip 等
查看>>
java spring boot jackson 配置 null字符串为"" null数组为[]
查看>>
java redistemplate 配置序列化
查看>>
ArcEngine中加载和读取Style文件或.serverstyle文件
查看>>
递归算法及经典递归例子代码实现
查看>>
Surrounded Regions
查看>>