当前位置:首页 > Web开发 > 正文

也就是 /usr/local/nginx/html/testpage.txt 文件 (2)使用alias关键字: loc

2024-03-31 Web开发

使用CAS登录的过程中会涉及到三次重定向,如果在同一个局域网内,是没有任何问题的,但如果涉及到跨网访谒就有问题了。

解决思路:

通过Nginx对要访谒的系统进行代办代理,把响应头中的重定向Location的地点改成外网能访谒到的IP,实现跨网访谒。

技术图片

实现法式:

1、安置Nginx,安置ngx_headers_more模块(下载路径:https://github.com/openresty/headers-more-nginx-module/tags)

安置方法:进入nginx的tar包解压目录,执行./configure --prefix==http://www.mamicode.com/usr/local/nginx  --add-module=http://www.mamicode.com/home/nginx/ngx_headers_more解压后的目录  --add-module=其他模块如echo模块

上述命令执行完成后,执行make,make install 从头安置nginx

2、配置nginx如下:

#user nobody; worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; #高版本的Nginx用这种方法  注意:有的版本中,通过$upstream_http_Location会一直取不到值,可以使用$sent_http_location来取代,$sent_http_location是不带IP的请求路径 map $sent_http_location $location{ ~/xxx-cas([\S]+$) :8888/xxx-cas$1; ~/xxx-auth([\S]*$) :8888/xxx-auth$1; ~/zhcx([\S]*$) :8888/zhcx$1; ~/sjpz([\S]*$) :8888/sjpz$1; default abcd$sent_http_location; } #低版本的Nginx用这种方法  注意:有的版本中,通过$upstream_http_Location会一直取不到值,可以使用$sent_http_location来取代,$sent_http_location是不带IP的请求路径 map $upstream_http_Location $location{ ~:8088/xxx-cas([\S]+$) :8888/xxx-cas$1; ~:8088/xxx-auth([\S]*$) :8888/xxx-auth$1; ~:8081/zhcx([\S]*$) :8888/zhcx$1; ~:8082/sjpz([\S]*$) :8888/sjpz$1; default abcd$upstream_http_Location; } server { listen 8080; server_name localhost; location /xxx-auth { proxy_pass :8088; more_set_headers -s ‘302‘ "Location $location"; } location /xxx-cas { proxy_pass :8088; more_set_headers -s ‘302‘ "Location $location"; } location /zhcx { proxy_pass :8081; more_set_headers -s ‘302‘ "Location $location"; } location /sjpz { proxy_pass :8082; more_set_headers -s ‘302‘ "Location $location"; } } }

一 Nginx的location语法

1

 

location [=|~|~*|^~] /uri/ { … }

 

=         严格匹配。如果请求匹配这个location,那么将遏制搜索并当即措置惩罚惩罚此请求

~         区分巨细写匹配(可用正则表达式)

~*       不区分巨细写匹配(可用正则表达式)

!~       区分巨细写不匹配

!~*     不区分巨细写不匹配

^~      如果把这个前缀用于一个通例字符串,那么报告nginx 如果路径匹配那么意外试正则表达式

示例1:

location / { }

匹配任意请求

示例2:

location ~* .(gif|jpg|jpeg)$ { rewrite .(gif|jpg|jpeg)$ /logo.png; }

不区分巨细写匹配任何以gif、jpg、jpeg结尾的请求,并将该请求重定向到 /logo.png请求

示例3:

location ~ ^.+\.txt$ { root /usr/local/nginx/html/; }

区分巨细写匹配以.txt结尾的请求,并设置此location的路径是/usr/local/nginx/html/。也就是以.txt结尾的请求将访谒/usr/local/nginx/html/ 路径下的txt文件

二 alias与root的区别

root    实际访谒文件路径会拼接URL中的路径

alias   实际访谒文件路径不会拼接URL中的路径

示例如下:

location ^~ /sta/ { alias /usr/local/nginx/html/static/; }

请求:

实际访谒:/usr/local/nginx/html/static/sta1.html 文件

location ^~ /tea/ { root /usr/local/nginx/html/; }

请求:

实际访谒:/usr/local/nginx/html/tea/tea1.html 文件

三 last 和 break关键字的区别

(1)last 和 break 当呈此刻location 之外时,两者的感化是一致的没有任何差异

(2)last 和 break 当呈此刻location 内部时:

last        使用了last 指令,rewrite 后会跳出location 感化域,从头开始再走一次适才的行为

break    使用了break 指令,rewrite后不会跳出location 感化域,它的生命也在这个location中终结

四 permanent 和 redirect关键字的区别

rewrite … permanent   永久性重定向,请求日志中的状态码为301

rewrite … redirect         姑且重定向,,请求日志中的状态码为302

五 综合实例

将切合某个正则表达式的URL重定向到一个固定页面

好比:我们需要将切合“/test/(\d+)/[\w-\.]+” 这个正则表达式的URL重定向到一个固定的页面。切合这个正则表达式的页面可能是:、等

从上面的介绍可以看出,这里可以使用rewrite重定向或者alias关键字来到达我们的目的。因此,这里可以这样做:

(1)使用rewrite关键字:

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/31815.html