nginx的proxy_pass指令细节问题

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"

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章