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"