Nginx Rewrite资源重定向
# Rewrite功能配置
# Rewrite功能主要是实现了url重写
# 如:你输入www.jd123.com,你可以通过Rewrite让它重定向到www.jd.com
# Rewrite的实现依赖与PCRE的支持,因此要使用先你需要先安装OCRE库。
# Nginx使用的是ngx_http_rewrite_module模块来解析和处理rewrite功能的相关配置的。
# Rewrite相关指令
# set指令:该指令用来设置一个新的变量。
# 语法: set $variable vale;
# 默认:空
# 位置:server、location、if
server {
listen 8081;
server_name localhost;
location /server {
set $name TOM;
set $age 18;
default_type text/plain;
return 200 $name=$age;
}
} # Rewrite常用全局变量
# $args:变量中存放了请求URL中的请求参数。比如:http://192.168.200.133/server?arg1=value1&args2=value2中的"arg1=value1&args2=value2"。功能和$query_string一样。
# $http_user_agent:变量存储的是用户访问服务器的代理信息(如果是浏览器访问,记录的是浏览器的相关版本信息)
# $host:访问服务器的server_name。
# $document_uri:存储的是当前访问地址的URI。比如:http://192.168.200.133/server?arg1=value1&args2=value2中的"/server"和$uri
# $document_root:变量存储的是当前请求对应的location的root值。
# $document_length:存储的是请求头中的Content-Length的值。
# $content_length:存储的是请求头中的Content-Type。
# $http_cookie:存储的是客户端的cookie信息,可以通过add_header Set-Cookie 'cookieName=value'来添加cookie数据。
# $limit_rate:存储的是Nginx服务器对网络链接速率的限制,也就是Nginx配置中的limit_rate指令设置的值,默认是0,不限制。
# $remote_addr:存储1是客户端的ip地址。
# $remote_port:客户端与服务端建立链接的端口。
# $remote_user:存储的了客户端的用户名,需要有认证模块才能获取。
# $scheme:存储了访问的协议。http、https……
# $server_addr:存储了服务器的地址。
# $server_name:服务器的名称。
# $server_port:服务器的端口。
# $server_protocol:客户端请求协议的版本。如:HTTP/1.1
# $request_body_file:存储了发给后端服务器的本地文件资源的名称。
# $request_method:客户端请求服务器的方式。get、post等
# $request_filename:当前请求的资源文件的路劲名。
# $request_uri:存储了当前请求的URI,并且附带请求参数,比如:http://192.168.200.133/server?arg1=value1&args2=value2中的"/server?arg1=value1&args2=value2" # 这些变量也都可以在log中使用
server {
listen 8081;
server_name localhost;
log_format main '$remote_addr - $request - $status';
location /server {
set $name TOM;
set $age 18;
access_log logs/access.log main;
default_type text/plain;
return 200 $name=$age;
}
} # if指令:条件判断
# 语法:if (condition){...}
# 位置:server、location
location /testif {
set &username 'ROSE';
default_type text/plain;
if ($args){ # 当$args等于0或者没有值的时候返回False
return 200 success;
}
if ($requests_method = POST){ #是post请求过来的为真,否则为假。!=:和=相反
RETURN 405;
}
if ($http_user_ahent ~* safari){ # 当$http_user_ahent包含safari的时候为真。safari你可以写成你的正则表达式。~和~*的区别是~*不区分大小写。
return 200 Chrome;
}
return 200 error;
} # "-f"和"!-f"判断请求文件是否存在。
# "-d"和"!-d"判断请求目录是否存在。
# "-e"和"!-e"判断请求文件或者目录是否存在。
# "-x"和"!-x"判断请求的文件是否是可执行文件。
location / {
root html;
if (!-f $request_filename){ # 如果文件不存在就返回file not found!
return 200 '<h1> file not found!</h1>';
}
} # break指令
# 该指令用于终端当前相同作用域中的其他Nginx配置。与该指令处于同一作用域的Nginx配置中,位于它前面的指令配置生效,位于后面的指令配置无效。
# 并且break还有另外一个功能就是终止当前匹配并把当前的URI在本location进行重定向访问处理。
# 位置 server、location、if
# 例子:
location /testbreak {
default_type text/plain;
set $username JERRY;
if ($args){
set $username TOM; # 执行
break;
set $username ROSE; # 不执行
}
add_header username $username; # 执行
return 200 'username $username'; # 重定向到 index index.html 这里我们没有配置index所以它走的默认dindex值。这就是上面说的终止当前并把当前的URI在本location重定向访问处理。
} # return 指令
# 语法一:return code [text];
# 语法二:return code URL;
# 语法三:return URL; 相当于:return 302 URL; 302就是重定向的相应码。
# 位置:server、location、if # rewrite指令:该指令通过正则表达式的使用来改变URI。可以同时存在一个或者多个指令,按照顺序一次对URL进行匹配和处理。
# 语法:rewrite regex replacement [flag]; //flag默认值:last
# 位置:server、location、if
# flag: last | break | redirect | permanent
# regex:用来陪陪URI的正则表达式
# replacement:匹配成功后,用于替换URI中被截取内容的字符串、如果该字符串式以"http://"或者"https://"开头的,则不会继续向下对uri进行其他处理,而是直接返回重写后的URI给客户端。
# 例子:
location /rewrite {
rewrite ^/rewrite/url\w*$ https://www.baidu.com; # 这里重定向跳转到www.baidu.com
rewrite ^/rewrite/(test)\w*$ /$1; # 这里重定向到location /test
rewrite ^/rewrite/(demo)\w*$ /$1; # 这里重定向到location /demo
}
location /test {
default_type text/plain;
return 200 test_success;
}
location /demo {
default_type text/plain;
return 200 demo_success;
} # flag的用法
location /testflag {
default_type text/plain;
return 200 testflag_success;
}
location /rewriteflag {
rewrite ^/rewrite/(testflag)\w*$ /$1;
# rewrite ^/rewrite/(testflag)\w*$ /$1 last; //当匹配成功后会在location所在的整个server中找到/testflag location然后返回,并且浏览器中的地址不会发生任何重定向的变化
# rewrite ^/rewrite/(testflag)\w*$ /$1 break; //当匹配成功后会在当前location中查找访问的资源,然后返回给浏览器。这里访问的路劲是:rewriteflag/html/index.html
# rewrite ^/rewrite/(testflag)\w*$ /$1 redirect;//临时重定向到 "location /testflag",浏览器地址会变动
# rewrite ^/rewrite/(testflag)\w*$ /$1 permanent;//永久重定向到 "location /testflag",浏览器地址会变动
} # rewrite_log指令
# 该指令配置是否开启URL重写日志的输出功能
# 语法:rewrite_log on | off
# 默认:off
# 位置:http、server、location、if
# 开启后,URL重写的相关日志将以notice级别输出到error指令配置的日志文件中去。
rewrite_log on;
error_log logs/error.log notice; # 这里错误日志级别设置为notice。 # 案例:域名跳转
server {
listen 80;
server_name www.it.com; location /test {
default_type text/plain;
return 200 test_success;
}
}
server {
listen 80;
server_name www.abc.com www.abc.ccn;
rewrite ^(.*) www.it.com$1; # $1当访问的是www.abc.com/test的时候 $1指的就是/test
} # 案例:域名镜像
# 主要实现将资源分散到不同的主机上
server {
listen 80;
server_name www.abc.cn; location /user {
rewrite ^/user(.*)$ http://www.otherhost.cn$1; # 这里上面也讲到过,并不会影响浏览器url地址,所以部分资源我们可以用专门的电脑去处理。
}
location .emp{
default_type text/plain;
return 200 '<h1>emp_access</h1>';
}
} # 防盗链,我们也可以通过rewrite返回一个默认图片
Nginx Rewrite资源重定向的更多相关文章
- Nginx Rewrite域名及资源重定向
一.正则匹配 1.匹配规则 ^$ 标识符匹配后面跟-一个字符串.匹配字符串后将停止对后续的正则表达式进行匹配,如location ^~/images/,在匹配了/images ...
- nginx 资源重定向
背景:有时候我一些资源(.js .css etc.)等不想访问我本地的,我想重定向到其他 URL 解决:直接修改 nginx 的配置文件 conf,添加下面的代码 #avoid processing ...
- Nginx中的Rewrite的重定向配置与实践
阅读目录 一:理解地址重写 与 地址转发的含义. 二:理解 Rewrite指令 使用 三:理解if指令 四:理解防盗链及nginx配置 简介:Rewrite是Nginx服务器提供的一个重要的功能, ...
- 常用nginx rewrite重定向-跳转实例:
1,将www.myweb.com/connect 跳转到connect.myweb.com rewrite ^/connect$ http://connect.myweb.com permanent; ...
- nginx——rewrite模块
1.什么是Nginx的Rewrite规则? Rewrite主要的功能就是实现URL的重写,Nginx的Rewrite规则采用PCRE(Perl Compatible Regular Expressio ...
- Nginx Rewrite规则记录
Rewrite 是一种服务器的重写脉冲技术,它可以使得服务器可以支持 URL 重写,是一种最新流行的服务器技术.它还可以实现限制特定IP访问网站的功能.很多情况下,某个 IP 的访问很容易造成 CPU ...
- Nginx Rewrite详解
Nginx Rewrite详解 引用链接:http://blog.cafeneko.info/2010/10/nginx_rewrite_note/ 原文如下: 在新主机的迁移过程中,最大的困难就是W ...
- [转帖]Nginx rewrite模块深入浅出详解
Nginx rewrite模块深入浅出详解 https://www.cnblogs.com/beyang/p/7832460.html rewrite模块(ngx_http_rewrite_modul ...
- Nginx系列二:(Nginx Rewrite 规则、Nginx 防盗链、Nginx 动静分离、Nginx+keepalived 实现高可用)
一.Nginx Rewrite 规则 1. Nginx rewrite规则 Rewrite规则含义就是某个URL重写成特定的URL(类似于Redirect),从某种意义上说为了美观或者对搜索引擎友好, ...
随机推荐
- 移动应用开发迎来哪些新技术?5月24日相约HDD·线上沙龙·创新开发专场
HUAWEI Developer Day(简称HDD),是华为开发者联盟与广大开发者深度交流的平台.围绕移动终端的最新技术和产品形态,持续向广大开发者传递华为终端的最新产品和开放服务能力,结合最新的行 ...
- 小米 pro 笔记本双硬盘设置引导盘
功能键 F2 进入 BIOS F12 进入 Boot 选项 步骤 小米 Pro 默认是开启了 UEFI,如果 Boot 选项没有显示出期望的系统盘,那么就是这个系统盘没有 UEFI 分区,按照这个文档 ...
- arts-week9
Algorithm 521. Longest Uncommon Subsequence I - LeetCode Review 如何搭建一个私有的CDN? 大部分情况下,我们使用市场上现有的 CDN ...
- 如何使用picGo+typora配置云笔记
PicGo的使用 安装 picGo 2.3版本 (window可用)---官网有点慢,已经下载到个人仓库 https://gitee.com/lht1132950411/study/blob/mast ...
- 题解 CF1095F 【Make It Connected】
题意简述 \(n\)( \(1≤n≤2×10^5\) )个点,每个点 \(i\) 有一个点权 \(a_i\) ( \(1≤a_i≤2×10^{12}\) ),将两个点 \(i\),\(j\) 直接相连 ...
- C++:制作火把
制作火把 时间限制 : 1.000 sec 内存限制 : 128 MB 题目描述: 小红最近在玩一个制作火把的游戏,一开始,小红手里有一根木棍,她希望能够通过这一根木棍通过交易换取制 ...
- Puppeteer学习笔记 (1)- 什么是Puppeteer
本文链接:https://www.cnblogs.com/hchengmx/p/11006263.html 1. phantomjs介绍 在介绍puppeteer之前必须介绍一下phantomjs,p ...
- 喜提JDK的BUG一枚!多线程的情况下请谨慎使用这个类的stream遍历。
你好呀,我是歪歪. 前段时间在 RocketMQ 的 ISSUE 里面冲浪的时候,看到一个 pr,虽说是在 RocketMQ 的地盘上发现的,但是这个玩意吧,其实和 RocketMQ 没有任何关系. ...
- 分享一个网上搜不到的「Redis」实现「聊天回合制」的方案
前言 为什么说网上搜不到,因为关于聊天回合制的方案作者本人快把百度搜秃噜了也没找到,好在最终是公司一个关系不错的大佬帮提供了点思路,最终作者将其完整实现了出来. 分享出来大家可以收藏,万一你哪天也碰到 ...
- CVPR2022 | 弱监督多标签分类中的损失问题
前言 本文提出了一种新的弱监督多标签分类(WSML)方法,该方法拒绝或纠正大损失样本,以防止模型记忆有噪声的标签.由于没有繁重和复杂的组件,提出的方法在几个部分标签设置(包括Pascal VOC 20 ...