proxy_pass指令用来设置被代理服务器的地址,可以是主机名称、IP地址加端口号等形式。其语法结构为:
proxy_pass URL;
其中,URL为要设置的被代理服务器的地址,包含传输协议、主机名或IP地址加端口号、URI等要素。传输协议通常是"http"或者"https://"。指令同时还接收以"unix"开始的UNIX-domain套接字路径。例如:
proxy_pass http://www.myweb.name/uri;
proxy_pass http://localhost:8080/uri;
proxy_pass http://unix:/tmp/backed.socket/uri;
如果被代理服务器是一组服务器的话,可以使用upstream指令配置后端服务器组。例如:
upstream proxy_svrs {
server http://192.168.1.1:8001/uri/;
server http://192.168.1.2:8001/uri/;
server http://192.168.1.3:8001/uri/;
}
server {
listen 80;
server_name www.myweb.name;
location / {
proxy_pass proxy_svrs;
}
}
注意点一 http://
如果组内的各个服务器中都指明了传输协议"http://",而在proxy_pass指令中就不需要指明,如果将upsteam 指令的配置改为:
upstream proxy_svrs {
server 192.168.1.1:8001/uri/;
server 192.168.1.2:8001/uri/;
server 192.168.1.3:8001/uri/;
}
则proxy_pass指令中应指明传输协议"http://"
proxy_pass http://proxy_svrs;
注意点二 是否加URI
URL中是否包含有URI,Nginx服务器的处理方式是不同的。如果URL中不包含URI,Nginx服务器不会改变原地址的URI;但是如果包含了URI,Nginx服务器将会使用新的URI代替原来的URI。案例一(不使用URI):
server {
listen 80;
server_name www.myweb.name;
location /server/ {
proxy_pass http://192.168.1.1;
}
}
如果客户端使用"http://www.myweb.name/server" 发起请求,该请求被配置中显示的location块进行处理,由于proxy_pass 指令的URL变量不含有URI,所以转向的地址为"http://192.168.1.1/server"。
案例二(使用URI):
server {
listen 80;
server_name www.myweb.name;
location /server/ {
proxy_pass http://192.168.1.1/loc/;
}
}
在该配置实例中,proxy_pass指令的URL包含了URI “/loc”。如果客户端仍然使用"http://myweb.name/server"发起请求,Nginx服务器将会把地址转向"http://192.168.1.1/loc/"。
总结:使用proxy_pass指令时,如果不想改变原地之中的URI,就不要在URI变量中配置URI。
注意点三 是否加斜杆 “/”
案例一
server {
listen 80;
server_name www.myweb.name;
location / {
#配置一 proxy_pass http://192.168.1.1;
#配置二 proxy_pass http://192.168.1.1/;
}
}
由于URL中不含URI,配置1和配置2的效果是一样的
案例二
server {
listen 80;
server_name www.myweb.name;
location /server/ {
#配置一 proxy_pass http://192.168.1.1;
#配置二 proxy_pass http://192.168.1.1/;
}
}
由于URL中含URI “/server”,效果不一样,如果客户端请求为"http://www.myweb.name/server/index.html".。
使用配置一,URL为"http://192.168.1.1/server/index.html"
使用配置二,URL为"http://192.168.1.1/index.html"