Nginx的rewrite地址重写

简介: Nginx的rewrite地址重写

一、Rewrite基本概述


  • Rewrite的作用:主要实现URL地址重写,以及地址重定向
  • Rewrite的使用场景:



  1. URL访问跳转:支持开发设计,页面跳转,兼容性支持,展示效果
  2. SEO优化:依赖于URL路径,以便于支持搜索引擎录入
  3. 维护:后台维护,流量转发等
  4. 安全:伪静态


Rewrite配置语法:


语法: rewrite regex replacement [flag];


可配置区域: server、location、if


例如:把所有请求都转发给/aaa/bbb.html


rewrite ^(.*)$ /aaa/bbb.html break;


二、Rewrite标记,Flag


(1)flag类型


Flag 意义
last 如果跳转的资源没有,那么就往下面的location需找资源,如果有就跳转,没有就停止跳转
break 如果跳转的资源没有,那么会直接停止跳转
redirect 返回302临时重定向,地址栏会显示跳转后的地址,只会在Nginx开启的时候生效
permanent 返回301永久重定向,地址栏会显示跳转后的地址,Nginx关闭后也会生效


(2)对于Flag中的break和last


-实验环境


系统 主机名 ip地址 nginx版本
Cetnos7.4 rzy 192.168.100.202 Nginx-1.18.0


-实验步骤

******(1)先做基础配置
[root@Centos7 ~]# hostnamectl set-hostname rzy
[root@Centos7 ~]# su
[root@rzy ~]# systemctl stop firewalld
[root@rzy ~]# setenforce 0
setenforce: SELinux is disabled
[root@rzy ~]# mount /dev/cdrom /mnt/
mount: /dev/sr0 写保护,将以只读方式挂载
mount: /dev/sr0 已经挂载或 /mnt 忙
       /dev/sr0 已经挂载到 /mnt 上
******(2)上传Nginx源码包,进行安装
[root@rzy ~]# yum -y install zlib-devel pcre-devel
。。。。。。
完毕!
[root@rzy ~]# ll
总用量 1020
-rw-------. 1 root root    1264 1月  12 18:27 anaconda-ks.cfg
-rw-r--r--  1 root root 1039530 4月  19 10:03 nginx-1.18.0.tar.gz
[root@rzy ~]# tar xf nginx-1.18.0.tar.gz  -C /usr/src/
[root@rzy ~]# cd /usr/src/nginx-1.18.0/
[root@rzy nginx-1.18.0]# useradd -M -s /sbin/nologin nginx
[root@rzy nginx-1.18.0]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module && make && make install 
[root@rzy nginx-1.18.0]# ln -s /usr/local/nginx/sbin/nginx  /usr/local/sbin/
[root@rzy nginx-1.18.0]# vim /lib/systemd/system/nginx.service
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
PrivateTmp=true
[Install]
WantedBy=multi-user.target
[root@rzy nginx-1.18.0]# cd /usr/local/nginx/conf/
[root@rzy conf]# cp nginx.conf nginx.conf.bak
[root@rzy conf]# sed -i '/#/d' nginx.conf
[root@rzy conf]# sed -i '/^$/d' nginx.conf
******(3)修改配置文件
[root@rzy conf]# vim nginx.conf
  1 worker_processes  1;
  2 events {
  3     worker_connections  1024;
  4 }
  5 http {
  6     include       mime.types;
  7     default_type  application/octet-stream;
  8     sendfile        on;
  9     keepalive_timeout  65;
 10     server {
 11         listen       80;
 12         server_name  localhost;
 13         root /aaa/bbb;  #网页目录
 14         location ~ ^/break {  #匹配break资源
 15             rewrite ^/break /ccc/ break; #跳转到/ccc/
 16         }
 17         location ~ ^/last { #匹配last资源
 18             rewrite ^/last /ccc/ last; #跳转到/ccc/
 19         }
 20         location ~ /ccc/ { #匹配/ccc/资源
 21             default_type application/json;
 22             return 200 '{"status":"success"}'; #返回200状态码,内容是{"status":"success"}的页面
 23         }
 24      
 25     }
 26 }
[root@rzy conf]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@rzy conf]# systemctl start nginx

使用浏览器进行访问

2021051918122173.png


分别访问这三个location,发现break直接报错,而last和/ccc/可以访问成功,这就是因为在指定的网页目录找不到指定资源的情况下,break会直接停止跳转从而报错404找不到页面,而last会继续往下寻找跳转的资源,所以last可以访问成功


20210519181236531.png

(2)对比Flag中的redirect和permanent


-实验环境


系统 主机名 ip地址 nginx版本
Cetnos7.4 rzy 192.168.100.202 Nginx-1.18.0


两个类型都可以进行跳转,都是last的检测方式,即找不到资源就往下一个location寻找


-实验步骤

******(1)继续上面的实验,修改配置文件
[root@rzy ~]# vim /usr/local/nginx/conf/nginx.conf
  1 worker_processes  1;
  2 events {
  3     worker_connections  1024;
  4 }
  5 http {
  6     include       mime.types;
  7     default_type  application/octet-stream;
  8     sendfile        on;
  9     keepalive_timeout  65;
 10     server {
 11         listen       80;
 12         server_name  localhost;
 13         root /aaa/bbb;
 14         location ~ ^/aaa {
 15             rewrite ^/aaa /ccc/ redirect;
 16         }
 17         location ~ ^/bbb{
 18             rewrite ^/bbb /ccc/ permanent;
 19         }
 20         location ~ /ccc/ {
 21             default_type application/json;
 22             return 200 '{"status":"success"}';
 23         }
 24 
 25     }
 26 }
[root@rzy ~]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@rzy ~]# systemctl restart nginx

在Nginx开启的时候,两种类型都可以进行重定向


20210519181252553.png

关闭Nginx,再次进行访问


2021051918131053.png


访问aaa无法跳转,访问bbb可以跳转到ccc

目录
相关文章
|
7月前
|
Web App开发 编解码 运维
LNMP详解(十二)——Nginx URL重写实战
LNMP详解(十二)——Nginx URL重写实战
76 2
|
应用服务中间件 nginx Perl
Nginx系列教程(09) - rewrite
Nginx系列教程(09) - rewrite
159 0
|
应用服务中间件 nginx
Nginx rewrite(URL)地址重定向
Nginx rewrite(URL)地址重定向
639 0
|
4月前
|
搜索推荐 Java 应用服务中间件
Nginx Rewrite 规则
【8月更文挑战第21天】Nginx Rewrite 规则
48 2
|
6月前
|
应用服务中间件 Apache nginx
apache、nginx开启rewrite重写服务及伪静态
apache、nginx开启rewrite重写服务及伪静态
356 4
|
7月前
|
缓存 应用服务中间件 网络安全
nginx 重写功能,防盗链功能 介绍
nginx 重写功能,防盗链功能 介绍
|
7月前
|
编解码 运维 搜索推荐
LNMP详解(十一)——Nginx URL重写原理
LNMP详解(十一)——Nginx URL重写原理
61 0
|
7月前
|
前端开发 应用服务中间件 nginx
nginx中配置不输入端口(指定地址)访问项目的方法
nginx中配置不输入端口(指定地址)访问项目的方法
|
7月前
|
应用服务中间件 nginx
百度搜索:蓝易云【Nginx【Nginx核心指令(rewrite指令、实战rewrite 、if指令、set和break指令】】
这些核心指令在Nginx的配置文件中发挥重要作用。使用rewrite指令可以实现URL的重写和重定向,if指令可以根据条件执行不同的操作,set指令可以创建自定义变量并设置其值,而break指令可以中断请求处理流程。理解和灵活运用这些指令,可以帮助我们更好地配置和管理Nginx服务器。
96 1
|
应用服务中间件 Apache nginx
nginx做反向代理导致request.getServerName()获取不到代理地址的问题
nginx做反向代理导致request.getServerName()获取不到代理地址的问题
301 0