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 路由配置的主要内容,如果未能解决你的问题,请参考以下文章