欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 会展 > location和重定向

location和重定向

2024/12/22 17:33:16 来源:https://blog.csdn.net/PzZzang2/article/details/144401788  浏览:    关键词:location和重定向

location和重定向:

重定向:就是输入的网站之后会跳转到设定的目标地址
rewrite:使用nginx提供的全局变量或者是自己设置的变量,集合正则表达式和标志位实现url/uri重定向

  • 1、更换域名
  • 2、特殊情况,比方说页面需要维护,但是我不想中断服务,可以实现url的跳转,访问正常的服务器
  • 3、防盗链

www.baidu.com ·················》www.sina.com
www.baidu.com/test1 ··············》www.sina.com/test2

rewrite跳转:
1、nginx http rewrite_module:

  • 支持url重定向
  • 支持条件判断
  • if语句,没有else

2、语法配置:
rewrite正则表达式 跳转后的内容 标志位

标志位的类型:
1、permanent ···········》永久重定向,返回码301
2、redirect:···········》临时重定向,返回码302
3、break 跳转时不会改变url
break是安装location的规则进行匹配的,匹配到即终止,不属于3**开头的重定向范围之内
4、last ·········呢明天规则匹配完毕之后,继续向下匹配新的location规则

break和last没有跳转到返回码,属于匹配location的机制

last一旦陷入死循环,内部循环10次就会停止,然后报错500

  • 1、服务器故障
  • 2、防火墙屏蔽
  • 3、应用的端口没有启动:
    ①、配置文件写错
    ②、有其他应用占用了本服务的端口
    ③、服务器资源不够,应用无法启动
    ④、磁盘空间不足
  • 4、last匹配机制导致陷入死循环,10次之后就会报错500
  • 5、检查网络

rewrite /test/(.*)/xy104/$1 redirect
(.*):正则表达式匹配的内容进行捕获
/usr/local/nginx/html/test/index.html
/usr/local/nginx/html/xy104/index.html

301和302:

  • 301永久重定向:永久性的变更url,搜索引擎的排名和权重会转义到新的url,客户端会保留新的url

  • 302临时重定向:短期的urk变更,一般用在维护时,搜索引擎的排名和权重不会转移到新的url,客户端会继续访问原始的url

1、基于域名的跳转:
www.xy105.com ·················》www.xy104.com
2、基于ip的跳转:
192.168.31.13这个服务器的网页正在维护,只有本机可以访问,其他主机访问统一显示正在维护中
rewrite ^/ (.*) $ http://www.xy105.com/$1 permanent

匹配$host的路径
www.xy105.com/(.*) 数码 物流
www.xy104.com/$1 数码 物流

set $rewrite true

set 设置变量的值,$rewrite的值设置为布尔类型的true

if ($remote_addr = "192.168.31.13" )  {    
set $rewrite false;}
if( $rewrite =true ) {
rewrite (.+) /error.html;}


#非192.168.31.13的ip地址,统一跳转到error.html的页面内容

location =/error.html {
root  html}

基于后缀名的跳转:
www.xy105.com/test1/index.php
www.xy104.com

s

server {listen 80;server_name www.xy105.com;location /test1/index.php {rewrite ^/test1/index\.php$ http://www.xy104.com permanent;}
}

nginx的正向代理,反向代理和nginx内置变量的介绍

nginx内置变量:请求方 ··········> 响应方

- $uri:可以获取客户端请求的地址,不包含主机和查询的参数
- $request_uri:请求客户端的请求地址-$host:请求的主机名?客户端······>发送请求的url地址- $http_user_agent:获取客户端请求的浏览器和操作系统- $remote_addr:客户端的ip地址(可以隐藏)- $remote_port:客户端请求的端口- $request_method:获取客户端的请求方式,get post- $scheme:获取请求的协议,http协议 https- $request_filename:获取客户端请求的文件名- $document_root:当前请求的根目录

nginx在配置location匹配时,会使用两个获取头部的内置变量:

X-Real-IP直接向服务端发送客户端访问的真实ip地址

X-Forwarded-For传递完整的代理链,只要数据包经过代理,都会被传递给nginx,记录所有的代理地址和客户端的真实ip★★★★★

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for ;记录所有经过的代理地址★★★★★

在这里插入图片描述

在nginx内部获取变量的值


nginx的代理:
正向代理
代理
可口可乐 ·············》超市···············》客户

访问一个代理的地址 ···················》我们目标访问的网页

代理:VPN 科学上网、加速

在内网环境中,只有特定的ip地址才可以访问内网的服务(ssh,网页)

  • 堡垒机(跳板机)

正向:
七层

反向:
四层 ············ 传输层 ip+端口
七层 ·············应用层 http协议

四层代理和七层代理之间的区别:

1、 四层代理是基于tcp/ip协议层的代理转发方式,只是基于ip+端口号的形式实现代理

四层代理无法获取http请求中的url信息,只是对数据包进行转发

四层转发数据包,是由内核进行转发,速度更快

2、 七层代理是通过http协议进行代理转发的方式,可以处理http的请求和响应

当收到http请求之后,根据代理的方式,把http请求转发到指定的服务器

可以对http请求进行深入的分析和处理,可以对请求内容做路由,可以做流量控制,可以进行内容过滤等等

七层代理是由应用层处理,用户态来处理,速度相对较慢,但是更安全,更可靠

都是能够做四层代理和七层代理的:nginx、Haproxy

lvs:只能做四层转发

正向代理:

正向代理都是对请求进行处理,属于七层代理
-----------面向客户端,客户端想要访问web服务器,但是客户端的ip地址禁止访问,可通过代理的ip地址访问目标的服务器

服务端只会知道代理服务器的地址,但是不知道客户端的ip地址

特点:

1、代理的ip地址和访问的服务端对客户端来说是已知的
2、后端服务器不知道客户端的ip地址

include /usr/local/ngin/conf.d/*.conf;

添加了这一段之后,可以在conf.d这个目录里配置多个conf文件,也可以有其他的配置文件,作为服务的配置文件

server {
listen 8888;
server_name localhost;

resolver 218.2.135.1 valid=300 ipv6=off;

#设置dns的解析地址,解析的缓存时间是300s,每隔300s重新解析一次
resolver_timeout 30s;
#设置解析服务的超时3s
proxy_read_timeout 30s;
#设置代理服务器读取的超时时间
proxy_send_timeout 30s
#代理服务器向后端服务器发送数据的超时时间
proxy_connect_timeout 30s
#代理服务器和后端服务器建立连接的超时时间

#固定代理地址set $url "www.baidu.com";location /{proxy_pass http://$url;#请求转发的语句proxy_buffers 256 4k;#设置后端缓存影响的缓冲区为256个,每个大小为4k
proxy_max_temp_file_size 0;#nginx不保存响应数据的临时文件,防止文件过多,占用硬盘空间
proxy_cache_valid 200 302 1m;#针对响应码是200和302,缓冲的有效期是1分钟
proxy_cache_valid 301 1h;#针对响应码是301,缓存的有效期是1小时
proxy_cache any 1m;# 除了200,301,302以外,其他的响应码都缓存1分钟
}

vim zddl.conf

server {listen 8889;location /   {proxy_pass $scheme://$http_host$request_uri
#将请求代理的地址自动设置proxy_set_header Host $http#在请求头当中传递客户端的host信息proxy_set_header X-Real-IP $remote_addr
#设置客户端的请求当中包含真实的ip地址proxy_set_header X-Forwarded-For $proxy_add_x_fowarded_for ;
#传递客户端经过的代理地址proxy_set_header X-Forwarded-Proto $scheme#传递客户端的请求的协议信息http httpsproxy_set_header X-Forwarded-Host $host#传递客户端的主机名(IP地址)proxy_set_header X-Forwarded-Port $server_port;
#传递给服务端,客户端请求服务端的端口resolver 218.2.135.1;
#设置dns地址

在这里插入图片描述
在这里插入图片描述

  }}}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com