nginx 路由配置

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nginx 路由配置相关的知识,希望对你有一定的参考价值。

参考技术A nginx中location对url匹配;

语法:location [=| | *|^~] /uri/ …

当匹配中符合条件的location,则执行内部指令;如果使用正则表达式,必须使用 *表明不区分大小写或者 区分大小写匹配;例如:location ~* .(gif|jpg|jpeg)$ ;当配皮成功后,将停止往下匹配;如果没有找到,则使用常规自字符串处理结果;

如果不是用正则表达式;可使用=严格匹配;

如果使用^~前缀用于一个常规字符串;表示如果路径匹配,则不测试正则表达式;

总结:指令按下列顺序被接受

1:=前缀的指令严格匹配这个查询;如果找到停止往下匹配

2:挣下的常规字符串,长的在前,如果这个匹配使用^~前缀,匹配停止;

3:正则表达式,按配置文件的顺序;

4:如果第三步产生匹配。则使用这个结果;停止匹配;否则使用第二部的匹配结果;

四个案例:

八个location案例

当匹配成功后location中可以使用rewrite进行路由重写;

首先需要了解nginx rewrite中可以使用到的全局变量;

$args  :请求中get的参数,例如a=1&b=2;

$body_remote_add  :二进制客户地址

$body_byte_sent  :相应时发送出去的body字节数数量,即使链接中断这个数据也是精确的;

$content_length  :请求头中的Content_length字段

$content_type  :请求中的Content_type字段

$document_root  :当前请求在root指令中的位置;服务器中绝对路径

$document_url  :与uri相同

$host  :请求主机头字段,否则为服务器名称;

$hostname  :保存了当前请求中不包含指令的uri,例如: http://www.aaa.com/index.php?a=1 中的/index.php;

$host  :请求的服务器名称;

$http_user_agent  :客户端浏览器的详细信息,如果使用 chrome 和Firefox 则访问结果是

location ~* .(gif|jpg|png|bmp) invalid_referer)
return 403;
#rewrite ^/ http://www.aaa.com/1.jpg ;

以上所有来至aaa.com和域名中包含google和baidu的站点都可以访问到当前站点的图片,如果来源域名不在这个列表中,那么$invalid_referer等于1,在if语句中返回一个403给用户,这样用户便会看到一个403的页面,如果使用下面的rewrite,那么盗链的图片都会显示403.jpg。如果用户直接在浏览器输入你的图片地址,那么图片显示正常,因为它符合none这个规则.

location ~* .(gif|jpg|png|swf|flv) invalid_referer)
return 404;



none:在浏览器输入网站域名直接访问的请求,需要允许访问的
blocked:有referer首部,但是referer首部被清除了,一般是防火墙改过的请求
server_name:带服务器名称的,一般是本机或其他服务器的请求,a.com和*.a.com是本公司的域名,要允许访问于是要先允许本机的访问,再禁止其他服务器的访问

location /public/admin/images/y.jpg
#valid_referers none blocked *.aaa.com server_names *.aaa.com ;
#valid_referers none blocked www.sss.com ; #设置只有该域> 名可以访问
valid_referers none blocked 111.111.111.11; #设置只有该域名可以访> 问
if ( request_uri?;
return 403;
rewrite ^/ http://www.aaa.com/1.jpg ;



. : 匹配除换行符以外的任意字符
? : 重复0次或1次

if ( /msie/$1 break;


if ( )") # 如果cookie匹配正则,就设置变量 id id等于正则第一个括号内匹配的部分


if ($request_method = POST) #如果提交方法为POST,则返回状态405(Method not allowed)。return不能返回301,302
return 405;


if ( slow可以通过 set 指令设置
limit_rate 10k;


if (!-f $request_filename) #如果请求的文件名不存在,则反向代理到localhost 。这里的break也是停止rewrite检查
break;
proxy_pass http://127.0.0.1;


if ($args ~ post=140) #如果query string中包含"post=140",永久重定向到example.com
rewrite ^ http://example.com/ permanent;


http
# 定义image日志格式
log_format imagelog '[ image_file ' ' body_bytes_sent ' ' $status;
# 开启重写日志
rewrite_log on;

以上是关于nginx 路由配置的主要内容,如果未能解决你的问题,请参考以下文章

nginx配置反向路由代理

nginx配置反向路由代理

Nginx-动态路由升级版

如何将https服务所在主机进行nginx配置,完成路由

Kong网关之负载均衡、动态路由配置

nginx中 vue路由去掉#后的配置问题