nginx地址重写

阅读: 评论:0

nginx地址重写

nginx地址重写

文章目录

  • nginx地址重写
    • 要求
    • 实现方案:
    • 实现步骤:
      • 1.修改配置文件(访问a.html重定向到b.html)
        • 第二种跳转(地址栏发生变化)
      • 2.修改配置文件(访问192.168.19.100的请求重定向到)
      • 3.访问192.168.19.100/的请求重定向到/下相同的页面
      • 4.实现浏览器与curl访问相同的页面文件,看到不同的内容
    • 总结:

nginx地址重写

地址重写(地址栏被重写)

例: www.360buy(京东之前的域名)-------->www.jd(新域名)

SSL+ —> (重写为https)

要求

沿用上次的www.a的配置,实现以下要求

  • 所有访问a.html的请求,重定向到b.html
  • 所有访问192.168.19.100的请求重定向到
  • 所有访问192.168.19.100/的请求重定向到/下相同的页面
  • 实现浏览器与curl访问相同的页面文件,返回不同的内容

实现方案:

主要用到参数 rewrite

rewrite regex replacement flag

rewrite 旧地址 新地址 【选项】

实现步骤:

1.修改配置文件(访问a.html重定向到b.html)

网站内页面跳转

 vim /usr/local/nginx/f....server {listen       80;server_name  www.a;rewrite /a.html /b.html;  #网址不会发生变化 跳转之后网址还是.html location / {root   html;index  index.html index.htm;}
....
添加b的界面
echo "woshiBBB" > /usr/local/nginx/html/b.html
重新加载配置文件/usr/local/nginx/sbin/nginx -s reload

客户端测试

第二种跳转(地址栏发生变化)
...server {listen       80;server_name  www.a;rewrite /a.html /b.html   redirect;  #网址会发生变化 跳转之后网址变为.html location / {root   html;index  index.html index.htm;}...

2.修改配置文件(访问192.168.19.100的请求重定向到)

网址跳转

1)修改Nginx服务配置

 vim /usr/local/nginx/f....server {listen       80;server_name  www.a;rewrite ^/ ;#或者 rewrite / ; 正则匹配包含即可#主要访问本机,都跳转到 上面这个网址location / {root   html;index  index.html index.htm;}
....
重新加载配置文件/usr/local/nginx/sbin/nginx -s reload

测试:跳转成功

3.访问192.168.19.100/的请求重定向到/下相同的页面

域名跳转,子页面不变

例:

解决方法,使用正则表达式

1)修改配置文件

vim /usr/local/nginx/f....server {listen       80;server_name  www.a;rewrite ^/(.*) /$1;#正则中()保留,1粘贴,但在nginx中$!代表粘贴第一个location / {root   html;index  index.html index.htm;}
....
重新加载配置文件/usr/local/nginx/sbin/nginx -s reload

2)测试:

可以看出不再是刚刚的首页了

4.实现浏览器与curl访问相同的页面文件,看到不同的内容

不同的浏览器返回的效果不一样

解决思路

先书写两个不同的页面,在 /usr/local/nginx/html下,其中的一个建个目录去存放,再加入一个判断,去解决页面冲突

 为了实现上述要求,我们需要使用一个变量,下面是对这个变量的一些介绍log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '   #日志格式,$remote_addr 变量,代表客户端的ip'$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';
日志每一列是什么
1.客户端的ip地址  $remote_addr
2.横线    -
3.验证的用户   $remote_user
4.方括号括起来的时间   [$time_local]
5.访问的什么的页面   "$request" 
6.访问的状态$status
7.访问的网页有多少字节  $body_bytes_sent
8.代表来源   $http_referer   referere 直接输网址为 -  ,如果从百度来,referere = www.baidu
9.显示客户端的详细信息 $http_user_agent

开始实现:

1)创建网页目录以及对应的页面文件

echo " i am curl test " > /usr/local/nginx/html/test.html
mkdir /usr/local/nginx/html/firefox
echo " i am firefox test " > /usr/local/nginx/html/firefox/test.html

2)修改配置文件

vim /usr/local/nginx/f....server {listen       80;server_name  www.a;# ~正则匹配(模糊匹配)*不区分大小写#不写*,需要写完整的名字,Firefoxif ( $http_user_agent ~* firefox) {rewrite ^/(.*) /firefox/$1;}location / {root   html;index  index.html index.htm;}
....
重新加载配置文件/usr/local/nginx/sbin/nginx -s reload

2)测试效果

也可以匹配其他浏览器和客户端,修改后面的Firefox为你需要的客户端或者目标浏览器

总结:

地址重写格式

  • rewrite 旧地址 新地址 [选项];(选项在下面已列出)
  • last 不在读其他的rewrite
  • break 不在读其他语句,结束请求
  • redirect 临时重定向
  • permament 永久重定向

测试效果

vim /usr/local/nginx/f....
server {listen       80;server_name  www.a;rewrite /a.html /b.html; rewrite /b.html /c.html; location / {    root   html;index  index.html index.htm;}
....
echo "A" >/usr/local/nginx/html/a.html
echo "B" >/usr/local/nginx/html/b.html
echo "C" >/usr/local/nginx/html/c.html
重新加载配置文件/usr/local/nginx/sbin/nginx -s reload

添加相应的参数,再次测试

vim /usr/local/nginx/f....
server {listen       80;server_name  www.a;rewrite /a.html /b.html  last;  #匹配及停止,如果没有匹配,正常进行rewrite /b.html /c.html; location / {root   html;index  index.html index.htm;}
....
/usr/local/nginx/sbin/nginx -s reload

测试break

location 也是匹配地址栏,匹配到a.html,跳转到b.html

验证结果

修改

再次测试,break直接结束

本文发布于:2024-01-30 02:11:40,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170655190418501.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:重写   地址   nginx
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23