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"

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