Nginx中的proxy_pass怎么使用
Nginx中的proxy_pass怎么使用
这篇文章主要介绍了Nginx中的proxy_pass怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Nginx中的proxy_pass怎么使用文章都会有所收获,下面我们一起来看看吧。
一、proxy_pass的nginx官方指南
nginx中有两个模块都有proxy_pass指令。
ngx_http_proxy_module的proxy_pass:
语法:proxy_passURL;场景:location,ifinlocation,limit_except说明:设置后端代理服务器的•协议(protocol)和地址(address),以及location中可以匹配的一个可选的URI。协议可以是"http"或"https"。地址可以是一个域名或ip地址和端口,或者一个unix-domainsocket路径。详见官方文档:http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_passURI的匹配,本文第四部分•重点讨论。
ngx_stream_proxy_module的proxy_pass:
语法:proxy_passaddress;场景:server说明:设置后端代理服务器的地址。这个地址(address)可以是一个域名或ip地址和端口,或者一个unix-domainsocket路径。详见官方文档:http://nginx.org/en/docs/stream/ngx_stream_proxy_module.html#proxy_pass
二、两个proxy_pass的关系和区别
在两个模块中,两个proxy_pass都是用来做后端代理的指令。
ngx_stream_proxy_module模块的proxy_pass指令只能在server段使用使用, 只需要提供域名或ip地址和端口。可以理解为端口转发,可以是tcp端口,也可以是udp端口。
ngx_http_proxy_module模块的proxy_pass指令需要在location段,location中的if段,limit_except段中使用,处理需要提供域名或ip地址和端口外,还需要提供协议,如”http”或”https”,还有一个可选的uri可以配置。
三、proxy_pass的具体用法
ngx_stream_proxy_module模块的proxy_pass指令
server{listen127.0.0.1:12345;proxy_pass127.0.0.1:8080;}server{listen12345;proxy_connect_timeout1s;proxy_timeout1m;proxy_passexample.com:12345;}server{listen53udp;proxy_responses1;proxy_timeout20s;proxy_passdns.example.com:53;}server{listen[::1]:12345;proxy_passunix:/tmp/stream.socket;}
ngx_http_proxy_module模块的proxy_pass指令
server{listen80;server_namewww.test.com;#正常代理,不修改后端url的location/some/path/{proxy_passhttp://127.0.0.1;}#修改后端url地址的代理(本例后端地址中,最后带了一个斜线)location/testb{proxy_passhttp://www.other.com:8801/;}#使用ifinlocationlocation/google{if($geoip_country_code~(RU|CN)){proxy_passhttp://www.google.hk;}}location/yongfu/{#没有匹配limit_except的,代理到unix:/tmp/backend.socket:/uri/proxy_passhttp://unix:/tmp/backend.socket:/uri/;;#匹配到请求方法为:PUTorDELETE,代理到9080limit_exceptPUTDELETE{proxy_passhttp://127.0.0.1:9080;}}}
四、proxy_pass后,后端服务器的url(request_uri)情况分析
server{listen80;server_namewww.test.com;#情形A#访问http://www.test.com/testa/aaaa#后端的request_uri为:/testa/aaaalocation^~/testa/{proxy_passhttp://127.0.0.1:8801;}#情形B#访问http://www.test.com/testb/bbbb#后端的request_uri为:/bbbblocation^~/testb/{proxy_passhttp://127.0.0.1:8801/;}#情形C#下面这段location是正确的location~/testc{proxy_passhttp://127.0.0.1:8801;}#情形D#下面这段location是错误的##nginx-t时,会报如下错误:##nginx:[emerg]"proxy_pass"cannothaveURIpartinlocationgivenbyregular#expression,orinsidenamedlocation,orinside"if"statement,orinside#"limit_except"blockin/opt/app/nginx/conf/vhost/test.conf:17##当location为正则表达式时,proxy_pass不能包含URI部分。本例中包含了"/"location~/testd{proxy_passhttp://127.0.0.1:8801/;#记住,location为正则表达式时,不能这样写!!!}#情形E#访问http://www.test.com/ccc/bbbb#后端的request_uri为:/aaa/ccc/bbbblocation/ccc/{proxy_passhttp://127.0.0.1:8801/aaa$request_uri;}#情形F#访问http://www.test.com/namea/ddd#后端的request_uri为:/yongfu?namea=dddlocation/namea/{rewrite/namea/([^/]+)/yongfu?namea=$1break;proxy_passhttp://127.0.0.1:8801;}#情形G#访问http://www.test.com/nameb/eee#后端的request_uri为:/yongfu?nameb=eeelocation/nameb/{rewrite/nameb/([^/]+)/yongfu?nameb=$1break;proxy_passhttp://127.0.0.1:8801/;}access_log/data/logs/www/www.test.com.log;}server{listen8801;server_namewww.test.com;root/data/www/test;indexindex.phpindex.html;rewrite^(.*)$/test.php?u=$1last;location~\.php${try_files$uri=404;fastcgi_passunix:/tmp/php-cgi.sock;fastcgi_indexindex.php;includefastcgi.conf;}access_log/data/logs/www/www.test.com.8801.log;}
文件: /data/www/test/test.php
echo'$_SERVER[REQUEST_URI]:'.$_SERVER['REQUEST_URI'];
通过查看 $_SERVER[‘REQUEST_URI’] 的值,我们可以看到每次请求的后端的request_uri的值,进行验证。
关于“Nginx中的proxy_pass怎么使用”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“Nginx中的proxy_pass怎么使用”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注恰卡编程网行业资讯频道。
推荐阅读
-
CentOS环境中如何部署nginx、php和虚拟主机配置
CentOS环境中如何部署nginx、php和虚拟主机配置今天小编...
-
怎么使用docker安装nginx提供的web服务
-
Python怎么实时获取任务请求对应的Nginx日志
Python怎么实时获取任务请求对应的Nginx日志这篇文章主要讲...
-
docker怎么搭建nacos+nginx+mysql+redis+springboot项目
-
Nginx的location功能怎么配置
Nginx的location功能怎么配置本篇内容介绍了“Nginx...
-
Nginx安装后常用功能如何配置
Nginx安装后常用功能如何配置这篇文章主要介绍“Nginx安装后...
-
怎么用服务器的负载均衡nginx+tomcat实现动静分离
-
Nginx反向代理与负载均衡概念及upstream模块如何使用
-
Nginx实现会话保持的方式有哪些
-
Nginx怎样实现负载均衡