Nginx中的proxy_pass该怎么设置,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
Nginx很适合用做反向代理[ Reverse-Proxy]的,主要原因有以下几点。
Nginx的高性能特性,可以Hold住更多的连接数。
更加成熟的面向互联网的设计,可以增强后端服务器的安全性。
可以方便的对性能进行横向扩展,增强数据处理能力。
基于以上优点,那么该如何正确的配置Nginx反向代理?
分为两种情况
第一种情况: proxy_pass后面的指定带有URI
被location所匹配的URI将会被proxy_pass后面的URI所替换。举例如下,
location /requested-uri/ {
proxy_pass http://example.com/backend/;
}
此时,如果请求的连接是, http://proxy-ip/requested-uri/a.html,则传输到后端的路径就会变成,http://example.com/backend/a.html
验证如下:
场景:在tomcat上创建了两个链接,分别是http://10.2.0.51:8000/zzp/app1 和 http://10.2.0.51:8000/zzp/app2
两个链接分别显示不同的内容,app1 和 app2
然后我们在nginx中配置如下:
location /zzy/ {
proxy_pass http://10.2.0.51:8000/zzp/;
}
这时,我们访问http://10.2.0.51/zzy/app1 时,就会发现会得到app1 ,说明zzy这个URI被zzp替换了。
第二种情况: proxy_pass后面不带URI时,则URI直接传输给了后端服务器。举例如下,
location /requested-uri/ {
proxy_pass http://example.com;
}
此时如果请求的连接是,http://proxy-ip/requested-uri/a.html,则传输到后端的路径就会变成,http://example.com/requested-uri/a.html
验证如下:
接上个例子,我们在proxy_pass中不带有uri,此时我们访问zzy这个uri时,就会发现,404错误。
location /zzy/ {
proxy_pass http://10.2.0.51:8000;
}
修改配置如下,
location /zzp/ {
proxy_pass http://10.2.0.51:8000;
}
访问http://10.2.0.51/zzp/app1时,就调整好了。
Exceptions:
凡事总有例外,Nginx也是这样。
特特例:1.1.12之前的版本,在某些情况下,不带URI的proxy_pass指令会被一些指令所取代。
一般特例:
当location后面带有正则表达式的时候,此时proxy_pass后面不带URI。
因为,如果location在有正则表达式的时候,nginx无法确定哪个部分的URI和表达式匹配。
当URI被用rewrite指令修改的时候,并且同样的配置将被用于处理一个请求。例如,这个好绕口。Boring
location /name/ {
rewrite /name/([^/]+) /users?name=$1 break;
proxy_pass http://127.0.0.1;
}
当prox_pass中使用了变量的时候,将会被以下替换。
location /name/ {
proxy_pass http://127.0.0.1$request_uri;
}
总而言之,只要我们不触碰exceptions发生的条件,我们就能达到自己的目的,如果不小心出现exceptions,那就来这里研究吧。
Basic is import , and should be studied in details.
关于Nginx中的proxy_pass该怎么设置问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。
原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/199204.html