美文网首页
Nginx 配置反向代理

Nginx 配置反向代理

作者: celavue | 来源:发表于2018-03-02 17:24 被阅读0次

1. location的配置


语法规则

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

~ 为区分大小写匹配(可用正则表达式)

!~为区分大小写不匹配

~* 为不区分大小写匹配(可用正则表达式)

!~*为不区分大小写不匹配

^~ 开头表示uri以某个常规字符串开头,Nginx将在这个字符串匹配后停止进行正则表达式的匹配(location指令中正则表达式的匹配的结果优先使用),如:location ^~/images/,你希望对/images/这个目录进行一些特别的操作,如增加expires头,防盗链等,但是你又想把除了这个目录的图片外的所有图片只进行增加expires头的操作,这个操作可能会用到另外一个location,例如:location ~*\.(gif|jpg|jpeg)$,这样,如果有请求/images/1.jpg,Nginx如何决定去进行哪个location中的操作呢?结果取决于标识符^~,如果你这样写:location /images/,这样nginx会将1.jpg匹配到location ~*\.(gif|jpg|jpeg)$这个location中,这并不是你需要的结果,而增加了^~这个标识符后,它在匹配了/images/这个字符串后就停止搜索其它带正则的location。Nginx不对url做编码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa匹配到(注意是空格)。

=      表示精确的查找地址,如location = /它只会匹配uri为/的请求,如果请求为/index.html,将查找另外的location,而不会匹配这个,当然可以写两个location,location = /和location /,这样/index.html将匹配到后者,如果你的站点对/的请求量较大,可以使用这个方法来加快请求的响应速度。

@      表示为一个location进行命名,即自定义一个location,这个location不能被外界所访问,只能用于Nginx产生的子请求,主要为error_page和try_files。

优先级顺序

(location =) > (location 完整路径) > (location ^~ 路径) > (location ~,~* 正则顺序) > (location 部分起始路径) > (/)

示例

location = / {

# 只匹配 / 查询。

}

location / {

# 匹配任何查询,因为所有请求都已 / 开头。但是正则表达式规则和长的块规则将被优先和查询匹配。

}

location ^~ /images/ {

# 匹配任何已 /images/ 开头的任何查询并且停止搜索。任何正则表达式将不会被测试。

}

location ~*.(gif|jpg|jpeg)$ {

# 匹配任何已 gif、jpg 或 jpeg 结尾的请求。

}

2.Rewrite


location ^~/proxy/html/{

rewrite ^/proxy/html/(.*)$ /$1 break;

proxy_pass http://www.b.com/;

}

以下做一个解释

1.

^~ /proxy/html/ 

  拦截请求,匹配任何以/proxy/html/开头的地址,匹配符合以后,停止往下搜索正则。

2.

rewrite ^/proxy/html/(.*)$ /$1 break;

  重写拦截进来的请求,并且只能对域名后边的除去传递的参数外的字符串起作用,例如传入www.c.com/proxy/html/api/msg?method=1\&para=2,只对/proxy/html/api/msg重写。

  rewrite后面的参数是一个简单的正则 ^/proxy/html/(.\*)$ ,$1代表正则中的第一个(),$2代表第二个()的值,以此类推。

  break代表匹配一个之后停止匹配。

3.

proxy_pass

  既是把请求代理到其他主机,其中 http://www.b.com/ 写法和 http://www.b.com写法的区别如下:

不带/

location /html/

{

  proxy_pass http://b.com:8300; 

}

带/

location /html/ 

    proxy_pass http://b.com:8300/; 

}

上面两种配置,区别只在于proxy_pass转发的路径后是否带 “/”。

  针对情况1,如果访问url = http://server/html/test.jsp,则被nginx代理后,请求路径会便问http://proxy_pass/html/test.jsp,将test/ 作为根路径,请求test/路径下的资源。

  针对情况2,如果访问url = http://server/html/test.jsp,则被nginx代理后,请求路径会变为 http://proxy_pass/test.jsp,直接访问server的根资源。

修改配置后重启nginx代理就成功了。

3.参考文档


nginx配置location总结及rewrite规则写法

用nginx的反向代理机制解决前端跨域问题

相关文章

  • Nginx应用场景

    反向代理,负载均衡,动静分离 1.反向代理 修改nginx配置,并重新加载 重新加载nginx配置./nginx ...

  • 01-nginx前端方向代理

    前端反向代理 1.下载nginx 2. 配置nginx.conf反向代理

  • nginx

    nginx的配置、虚拟主机、负载均衡和反向代理一nginx的配置、虚拟主机、负载均衡和反向代理二nginx的配置、...

  • nginx反向代理

    什么是反向代理 如何实现反向代理 准备工作以及安装nginx 配置nginx nginx的初始配置文件去掉注释后的...

  • nginx 配置

    nginx 多个 root页面配置 反向代理

  • 第二课 nginx+tomcat集群

    正向代理,反向代理 配置Nginx 配置文件目录:/usr/local/nginx-1.6.1/conf/ngin...

  • nginx+tomcat集群

    正向代理,反向代理 配置Nginx 配置文件目录:/usr/local/nginx-1.6.1/conf/ngin...

  • nginx+tomcat集群

    正向代理,反向代理 配置Nginx 配置文件目录:/usr/local/nginx-1.6.1/conf/ngin...

  • Nginx 负载均衡/反向代理配置

    反向代理: 修改nginx配置nginx.conf文件: 在location /{ #...

  • Nginx系列10:nginx的反向代理配置

    1. 理解什么是反向代理 关于反向代理的概念可以参考上一篇文章《Nginx系列9:nginx正反向代理概念与配置》...

网友评论

      本文标题:Nginx 配置反向代理

      本文链接:https://www.haomeiwen.com/subject/gcdhtftx.html