Nginx 转发匹配规则的实现_nginx

来源:脚本之家  责任编辑:小易  

Nginx中的正则匹配数字:1、正则表达式匹配~ 区分大小写匹配~* 不区分大小写匹配

一、正则表达式匹配 ~ 为区分大小写匹配 ~* 为不区分大小写匹配 !~ 和 !~* 分别为区分大小写不匹配及不区分大小写不匹配

用如下方法:ServiceRegistry serviceRegistry = new Stan

二、文件及目录匹配 -f 和 !-f 用来判断是否存在文件 -d 和 !-d 用来判断是否存在目录 -e 和 !-e 用来判断是否存在文件或目录 -x 和 !-x 用来判断文件是否可执行

  方法  1. nginx增加配置  proxy_set_header X-Real-I

三.rewrite指令的最后一项参数为flag标记,flag标记有 last 相当于 apache 里面的[L]标记,表示 rewrite。 break 本条规则匹配完成后,终止匹配,不再匹配后面的规则。 redirect 返回302临时重定向,浏览器地址会显示跳转后的URL地址。 permanent  返回301永久重定向,浏览器地址会显示跳转后的URL地址。

nginx不得不说的参数之 proxy_intercept_errors与fastcgi_inter

使用 last 和 break 实现URI重写,浏览器地址栏不变。

反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将

而且两者有细微差别,使用alias指令必须用 last标记;使用proxy_pass指令时,需要使用break标记。Last标记在本条rewrite规则执行完毕后,会对其所在server{......}标签重新发起请求,而break标记则在本条规则匹配完成后,终止匹配。

今天,我们来聊聊大连蛇岛!大连蛇岛在旅顺口区西北部的渤海中,距陆地最近处7海里。岛长约1500米,宽约800米,总面积约1.2平方公里。主峰海拔216.9米,四面多悬崖峭壁,唯东南角有一片卵石滩。岛上植物繁盛,达200余种。在林丛、石穴、山梁、阴谷等处,活动着1.3万条左右的蝮蛇,学名黑眉蝮蛇。春秋两季,是蝮蛇的采食季节,大量迁徙鸟类成为蛇类捕杀的猎物。基本信息中文名称大连蛇岛位置辽宁旅顺面积1.2平方公里海拔216.9米蛇岛形成原先这里不叫蛇岛,因为它还不是岛,是与大陆连接的一座座小山峰。这里是动物的乐园,冬天不冷夏天不热,常年空气湿润,小山上树木成林绿草成荫。这样好的地方当然是许多动物向往

例如:如果我们将类似URL/photo/123456 重定向到 /path/to/photo/12/1234/123456.png

听到滋滋声响,闻到扑鼻的辣子香味,快手版陕西油泼面就做好了原创小厨大刘2017-08-3009:17陕西可谓是面食王国,据说其种类多达50余种。其中宝鸡扯面、岐山臊子面,杨凌醮水面、凤县浆水面、礼泉烙面都非常有名。这众多面食里面,我个人感觉最好吃的应该是油泼面了。正宗的油泼面是做成扯面,加入调料和配菜,然后用油泼。但我平常也会做成棍棍面、手擀面、刀削面,然后用油泼,同样好吃。正宗的油泼面只有豆芽和青菜,没有其它配菜,非常简单。我最喜欢油泼辣子的时候,听见“滋滋”的响声,就闻到扑鼻的辣子和芝麻香味了,一碗香喷喷的油泼面就做成了。营养分析:面条含有丰富的碳水化合物,能为人体提供足够的能量。中医认为

作为业内研发工程师,我在这里透露一些内幕吧。几百块的化妆品效果就能比几十块的化妆品效果好十倍?回答是--NO!决定化妆品效果的,并不是价格!化妆品行业是一个充分竞争的行业,任何充分竞争的成熟行业,利润都不会很高(个位数利润),但化妆品行业号称毛利润高达80%,那这里70%的利润都跑到哪里去了呢?答案是营销和渠道费用占去了一大部分,下面这张图就是显示了欧莱雅集团的一个热门产品兰蔻肌底液的价格里钱都花在哪些方面:可是以看出大头都在营销推广和渠道,而用于产品本身,即使加上产品研发的费用也才6%。这是商档产品中的情况。事实上,在国内化妆品行业,无论高低端产品,料体+包装的成本是不能超过零售价的10%的

rewrite "/photo/([0-9]{2})([0-9]{2})([0-9]{2})" rewrite "/path/to/photo/$1/$1$2/$1$2$3.png" ;

两夫妻结婚3年没怀上宝宝,去医院检查后发现两边输卵管阻塞,几乎没有自然受孕的机会。丈夫听说输卵管阻塞是因为以前做过人流手术,认为被欺骗吵着要离婚。其实,输卵管阻塞除了先天发育异常,多半是由于盆腔炎性疾病引起的。当机体防御功能遭到破坏,或免疫功能降低,内分泌发生变化或病原体侵入,均可导致炎症发生。(网络图,仅供参考)轻症时可没有任何症状或症状轻微,常不被发觉,随着炎症加重,可能出现腹痛、分泌物异常、发热等症状。引发炎症的病原体,可能来自外界,也有可能来自原寄生在阴道内的微生物群。人流等手术操作,引起生殖道黏膜损伤、出血,可能导致下生殖道内源性病原体上行感染。但是很多情况下,没有任何宫腔操作也有可

四、NginxRewrite 规则相关指令

1、break指令

使用环境:server、location、if

该指令的作用是完成当前的规则集,不再处理rewrite指令。

2、if 指令

使用环境:server、location

该指令用于检查一个条件是否符合,如果条件符合,则执行大括号内的语句。If指令不支持嵌套,不支持多个条件&&和||处理。

3、return指令

语法:returncode

使用环境:server、location、if

该指令用于结束规则的执行并返回状态码给客户端。

示例:如果访问的URL以".sh"或".bash"结尾,则返回403状态码

location ~ .*\.(sh|bash)?$ { return 403; }

4、rewrite 指令

语法:rewriteregex replacement flag

使用环境:server、location、if

该指令根据表达式来重定向URI,或者修改字符串。指令根据配置文件中的顺序来执行。注意重写表达式只对相对路径有效。如果你想配对主机名,你应该使用if语句,示例如下:

if( $host ~* www\.(.*) ) { set $host_without_www $1; rewrite ^(.*)$ http://$host_without_www$1permanent; }

5、Set指令

语法:setvariable value ;

默认值:none

使用环境:server、location、if

该指令用于定义一个变量,并给变量赋值。变量的值可以为文本、变量以及文本变量的联合。

set$varname "hello world";

6、Uninitialized_variable_warn指令

语法:uninitialized_variable_warnon|off

使用环境:http、server、location、if

该指令用于开启和关闭未初始化变量的警告信息,默认值为开启。

五.Nginx的Rewrite规则编写实例

1、当访问的文件和目录不存在时,重定向到某个html文件

if( !-e $request_filename ) { rewrite ^/(.*)$ index.htmllast; }

2、目录对换 /123456/xxxx  ====>  /xxxx?id=123456

rewrite ^/(\d+)/(.+)/ /$2?id=$1 last;

3、如果客户端使用的是IE浏览器,则重定向到/ie目录下

if( $http_user_agent ~ MSIE) { rewrite ^(.*)$ /ie/$1 break; }

4、禁止访问多个目录

location ~ ^/(cron|templates)/ { deny all; break; }

5、禁止访问以/data开头的文件

location ~ ^/data { deny all; }

6、禁止访问以.sh,.flv,.mp3为文件后缀名的文件

location ~ .*\.(sh|flv|mp3)$ { return 403; }

7、设置某些类型文件的浏览器缓存时间

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ { expires 30d; } location ~ .*\.(js|css)$ { expires 1h; }

8、给favicon.ico和robots.txt设置过期时间

这里为favicon.ico为99天,robots.txt为7天并不记录404错误日志

location ~(favicon.ico) { log_not_found off; expires 99d; break; } location ~(robots.txt) { log_not_found off; expires 7d; break; }

9、设定某个文件的过期时间;这里为600秒,并不记录访问日志

location ^~ /html/scripts/loadhead_1.js { access_log off; root /opt/lampp/htdocs/web; expires 600; break; }

10、文件反盗链并设置过期时间

这里的return412 为自定义的http状态码,默认为403,方便找出正确的盗链的请求

rewrite ^/ http: //img.linuxidc.net/leech.gif;//显示一张防盗链图片 access_log off; //不记录访问日志,减轻压力 expires 3d //所有文件3天的浏览器缓存 location ~*^.+\.(jpg|jpeg|gif|png|swf|rar|zip|css|js)$ { valid_referers none blocked *.linuxidc.com*.linuxidc.net localhost 208.97.167.194; if ($invalid_referer) { rewrite ^/ http://img.linuxidc.net/leech.gif; return 412; break; } access_log off; root /opt/lampp/htdocs/web; expires 3d; break; }

11、只允许固定ip访问网站,并加上密码

root /opt/htdocs/www; allow 208.97.167.194; allow 222.33.1.2; allow 231.152.49.4; deny all; auth_basic “C1G_ADMIN”; auth_basic_user_file htpasswd;

12、将多级目录下的文件转成一个文件,增强seo效果

/job-123-456-789.html 指向/job/123/456/789.html

rewrite^/job-([0-9]+)-([0-9]+)-([0-9]+)\.html$ /job/$1/$2/jobshow_$3.html last;

13、文件和目录不存在的时候重定向:

if (!-e $request_filename) { proxy_pass http://127.0.0.1; }

14、将根目录下某个文件夹指向2级目录

/shanghaijob/ 指向 /area/shanghai/

如果你将last改成permanent,那么浏览器地址栏显是/location/shanghai/

作为业内研发工程师,我在这里透露一些内幕吧。几百块的化妆品效果就能比几十块的化妆品效果好十倍?回答是--NO!决定化妆品效果的,并不是价格!化妆品行业是一个充分竞争的行业,任何充分竞争的成熟行业,利润都不会很高(个位数利润),但化妆品行业号称毛利润高达80%,那这里70%的利润都跑到哪里去了呢?答案是营销和渠道费用占去了一大部分,下面这张图就是显示了欧莱雅集团的一个热门产品兰蔻肌底液的价格里钱都花在哪些方面:可是以看出大头都在营销推广和渠道,而用于产品本身,即使加上产品研发的费用也才6%。这是商档产品中的情况。事实上,在国内化妆品行业,无论高低端产品,料体+包装的成本是不能超过零售价的10%的

rewrite ^/([0-9a-z]+)job/(.*)$ /area/$1/$2last;

上面例子有个问题是访问/shanghai时将不会匹配

rewrite ^/([0-9a-z]+)job$ /area/$1/ last; rewrite ^/([0-9a-z]+)job/(.*)$ /area/$1/$2last;

这样/shanghai 也可以访问了,但页面中的相对链接无法使用,

./list_1.html真实地址是/area/shanghia/list_1.html会变成/list_1.html,导至无法访问。

那我加上自动跳转也是不行咯

(-d $request_filename)它有个条件是必需为真实目录,而我的rewrite不是的,所以没有效果

if (-d $request_filename){ rewrite ^/(.*)([^/])$ http://$host/$1$2/permanent; }

知道原因后就好办了,让我手动跳转吧

rewrite ^/([0-9a-z]+)job$ /$1job/permanent; rewrite ^/([0-9a-z]+)job/(.*)$ /area/$1/$2last;

15、域名跳转

server{ listen 80; server_name jump.linuxidc.com; index index.html index.htm index.php; root /opt/lampp/htdocs/www; rewrite ^/ http://www.linuxidc.com/; access_log off; }

16、多域名转向

server_name www.linuxidc.comwww.linuxidc.net; index index.html index.htm index.php; root /opt/lampp/htdocs; if ($host ~ "linuxidc\.net") { rewrite ^(.*) http://www.linuxidc.com$1permanent; }

六、nginx全局变量

arg_PARAMETER #这个变量包含GET请求中,如果有变量PARAMETER时的值。 args #这个变量等于请求行中(GET请求)的参数,如:foo=123&bar=blahblah; binary_remote_addr #二进制的客户地址。 body_bytes_sent #响应时送出的body字节数数量。即使连接中断,这个数据也是精确的。 content_length #请求头中的Content-length字段。 content_type #请求头中的Content-Type字段。 cookie_COOKIE #cookie COOKIE变量的值 document_root #当前请求在root指令中指定的值。 document_uri #与uri相同。 host #请求主机头字段,否则为服务器名称。 hostname #Set to themachine's hostname as returned by gethostname http_HEADER is_args #如果有args参数,这个变量等于”?”,否则等于”",空值。 http_user_agent #客户端agent信息 http_cookie #客户端cookie信息 limit_rate #这个变量可以限制连接速率。 query_string #与args相同。 request_body_file #客户端请求主体信息的临时文件名。 request_method #客户端请求的动作,通常为GET或POST。 remote_addr #客户端的IP地址。 remote_port #客户端的端口。 remote_user #已经经过Auth Basic Module验证的用户名。 request_completion #如果请求结束,设置为OK. 当请求未结束或如果该请求不是请求链串的最后一个时,为空(Empty)。 request_method #GET或POST request_filename #当前请求的文件路径,由root或alias指令与URI请求生成。 request_uri #包含请求参数的原始URI,不包含主机名,如:”/foo/bar.php?arg=baz”。不能修改。 scheme #HTTP方法(如http,https)。 server_protocol #请求使用的协议,通常是HTTP/1.0或HTTP/1.1。 server_addr #服务器地址,在完成一次系统调用后可以确定这个值。 server_name #服务器名称。 server_port #请求到达服务器的端口号。

七、Apache和Nginx规则的对应关系

Apache的RewriteCond对应Nginx的if

Apache的RewriteRule对应Nginx的rewrite

Apache的[R]对应Nginx的redirect

Apache的[P]对应Nginx的last

Apache的[R,L]对应Nginx的redirect

Apache的[P,L]对应Nginx的last

Apache的[PT,L]对应Nginx的last

例如:允许指定的域名访问本站,其他的域名一律转向www.zgxue.com

Apache:

RewriteCond %{HTTP_HOST} !^(.*?)\.aaa\.com$[NC] RewriteCond %{HTTP_HOST} !^localhost$ RewriteCond %{HTTP_HOST}!^192\.168\.0\.(.*?)$ RewriteRule ^/(.*)$ //www.zgxue.com[R,L]

Nginx过滤示例:

if( $host ~* ^(.*)\.aaa\.com$ ) { set $allowHost ‘1'; } if( $host ~* ^localhost ) { set $allowHost ‘1'; } if( $host ~* ^192\.168\.1\.(.*?)$ ) { set $allowHost ‘1'; } if( $allowHost !~ ‘1' ) { rewrite ^/(.*)$ //www.zgxue.comredirect ; }

总结

后端开发是一个最接近全栈的一个职业,前端不够用后端顶上写页面JS,没有运维不要紧后端来维护服务器,总之一个好的后端就是能面面俱到。

到此这篇关于Nginx 转发匹配规则的实现的文章就介绍到这了,更多相关Nginx 转发匹配规则内容请搜索真格学网以前的文章或继续浏览下面的相关文章希望大家以后多多支持真格学网!

扩展阅读,根据您访问的内容系统为您准备了以下内容,希望对您有帮助。

想用nginx配置一个最简单的代理转发的功能,请问怎么实现

服务器配置在192.168.253.119,在http下添加个server

server{

listen 8080;#监听端口,根据你的需要进行修改(建议改为80)

resolver114.114.114.114;#dns服务器,你这个不加应该也行,因为只用IP的

access_log logs/proxy.access.log proxy buffer=1024k;#日志路径,可以不写

location ~ ^/web/service\.aspx$ {

proxy_pass http://192.168.253.129$request_uri;

}更多追问追答追问感谢回答,后天我回公司试一下追答如有问题欢迎追问,请将error.log中的错误信息附上追问你好,我是这样配置的,但不成功

请问你的QQ多少,我想向你进一步请教,感谢!!追答1527979930

nginx location 路径匹配:不含某字符的路径

nginx不支持非正则,所以,没有办法一条实现这个你这个功能,只能“曲线救国”,要麻烦点,多建虚机:

还有就是浏览器#号不会被传入到服务端,所以,你要替换掉这个符号,我这里用的是@

set $ip 192.168.0.2;

if ($request_uri ~* /@/(.*)+) {

set $ip 192.168.0.1;

}

location / {

proxy_pass http: //$ip;

}本回答被提问者采纳

nginx环境,二级目录下怎么去掉首页的forum.php

  1. 把index.php设为默认搜索页

  2. 在Nginx低版本中,是不支持PATHINFO的,但是可以通过在Nginx.conf中配置转发规则实现:

location /{// …..省略部分代码

    if(!-e $request_filename){

    rewrite  ^(.*)$  /index.php?s=$1  last;

    break;

}

}

   

   其实内部是转发到了ThinkPHP提供的兼容模式的URL,利用这种方式,可以解决其他不支持PATHINFO的WEB服务器环境。

   如果你的ThinkPHP安装在二级目录,Nginx的伪静态方法设置如下,其中youdomain是所在的目录名称。

location /youdomain/{

    if(!-e $request_filename){

    rewrite  ^/youdomain/(.*)$  /youdomain/index.php?s=$1  last;

}

}

   

nginx转发不同的域名给不同IP

如果想把不同的域名分配给不同的服务器,最好的方式是在server域中进行配置。可以通过server_name指令去区分请求时属于那个域的。配置方式为:

#...

#...

server {

   listen 8000 default_server;

   server_name img10.ff.com img10.*;

   #其它的配置项.

   #...

   #把该server中的所有请求都转给img10.ff.com这个upstream.

   location / {

       proxy_pass http://img10.ff.com;

       break;

   }

}

server {

   listen 8000;

   server_name img11.ff.com img11.*;

   #其它的配置项.

   #...

   #把该server中的所有请求都转给img11.ff.com这个upstream.

   location / {

       proxy_pass http://img11.ff.com;

       break;

   }

}

#其它配置选项。

注意,此处所有的访问都是访问的反向代理的机器,客户端拿到的ip也是反向代理的ip,只是反向代理会根据server_name把请求转发给后端的机器去处理。因此,注意ping命令的返回结果都是反向代理的ip。


  • 本文相关:
  • nginx 配置location匹配规则实例讲解
  • nginx处理请求时的匹配规则详析
  • nginx location指令uri匹配规则详解小结
  • nginx location匹配规则的方法示例
  • nginx 匹配规则小总结(推荐)
  • 详解nginx location 匹配规则
  • nginx服务器的location指令匹配规则详解
  • 简介nginx中的location匹配规则
  • 详解nginx服务器中配置超时时间的方法
  • centos6.6 安装 tengine 笔记
  • nginx url自动加斜杠及301重定向的问题
  • nginx status状态页配置方法和中文说明
  • nginx中的gzip压缩配置介绍
  • 利用nginx反向代理与负载均衡搭建多人测试环境详解
  • 在ubuntu系统上安装nginx服务器的简单方法
  • ubuntu16.04下彻底卸载nginx的相关命令
  • nginx修改配置限制恶意爬虫频率
  • 详解nginx 对访问量的控制
  • 想用nginx配置一个最简单的代理转发的功能,请问怎么实现
  • nginx location 路径匹配:不含某字符的路径
  • nginx环境,二级目录下怎么去掉首页的forum.php
  • nginx转发不同的域名给不同IP
  • nginx的伪静态rewrite规则,匹配栏目目录没有斜杠不能访问
  • Nginx中的正则如何匹配数字
  • 怎么知道nginx匹配哪条规则
  • Linux中的请求是如何通过nginx转发到tomcat
  • nginx不得不说的参数之 为什么nginx error
  • nginx怎么把来自80端口的请求交给8080
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全星外虚拟主机华众虚拟主机linuxwin服务器ftp服务器dns服务器tomcat nginxzabbix云和虚拟化服务器其它首页服务器nginxnginx 配置location匹配规则实例讲解nginx处理请求时的匹配规则详析nginx location指令uri匹配规则详解小结nginx location匹配规则的方法示例nginx 匹配规则小总结(推荐)详解nginx location 匹配规则nginx服务器的location指令匹配规则详解简介nginx中的location匹配规则详解nginx服务器中配置超时时间的方法centos6.6 安装 tengine 笔记nginx url自动加斜杠及301重定向的问题nginx status状态页配置方法和中文说明nginx中的gzip压缩配置介绍利用nginx反向代理与负载均衡搭建多人测试环境详解在ubuntu系统上安装nginx服务器的简单方法ubuntu16.04下彻底卸载nginx的相关命令nginx修改配置限制恶意爬虫频率详解nginx 对访问量的控制nginx提示:500 internal servernginx 多站点配置方法集合权限问题导致nginx 403 forbiddenginx fastcgi错误primary scripnginx服务器的反向代理proxy_pasnginx 403 forbidden的解决办法nginx伪静态配置和常用rewrite伪nginx下301重定向域名的方法小结详解nginx服务器中配置超时时间的windows下nginx+php5的安装与配置nginx+redis实现session共享centos下编译安装nginx教程详解nginx 启用 boringssl的配置方法nginx中配置用户服务器访问认证的方法示例linux下安装配置nginx详解nginx反向代理+dns轮询+iis7.5 千万pv 百深入理解nginx如何实现高性能和可扩展性nginx下支持thinkphp url rewrite的配置示nginx 日志改成 json 格式的方法linux centos7环境下nginx安装教程
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved