nginx反向代理的基本设置的指令:
一、proxy_pass指令
proxy_pass URL;
其中,URL 是要设置的被代理服务器的地址。包含传输协议,主机名或ip地址加端口号、url等要素。
其中协议包括,http:// 或者 https:// 。
1)如:
proxy_pass http://www.myweb.name/uri; proxy_pass http://localhost:8000/uri/; proxy_pass http://unix:/tmp/backend.socket:uri/;
2)如果被代理服务器是一组服务器的话,可以用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 [http://]proxy_svrs; } }
ps:
如果upstream里的 高亮部分,http:// 不填写,那么可以在外部标蓝处写上。二者写法选一。
注意:
在使用该指令的过程中,nginx会根据URL中是否包含URI,而作出不同的处理方式。
1、 如果URL中不包含URI,那么Nginx 不会改变原地址URI。
2、如果URL中含有URI,那么会用新的URI替代原来的URI。
举个例子:
片段一: server { listen 80; server_name www.myweb.name; location /server/ { proxy_pass http://192.168.1.1; } }
片段二: server { listen:80; server_name www.myweb.name; location /server/ { proxy_pass http://192.168.1.1/loc/; } }
这个时候,如果有个请求,如http://www.myweb.name/server,
该请求在片段一中的结果是:
转向地址为http://192.168.1.1/server
而在片段二中的结果是:
转向地址为http://192.168.1.1/loc/
所以:
如果不想改变原地址的URI,就不要在URL变量中配置URI。
3、proxy_pass指令的URL变量末尾是否加斜杠“/”
#配置1:proxy_pass http://192.168.1.1; #配置2:proxy_pass http://192.168.1.1/;
示例一:这时一个请求过来,
比如:
http://www.myweb.name/index.htm
因为请求的URL中不包含URI,所以,配置1,和配置2的效果是一样的。
转向的URL都是:
http://192.168.1.1/index.htm
示例二:这时一个请求过来,
如:
http://192.168.1.1/server/index.htm
由于包含URI,
所以在配置1的时候,proxy_pass 指令中的URL变量不包含URI,所以,Nginx不会改变原地址的URI;
使用配置2的时候,proxy_pass指令中的URL的变量包含URI,"/",所以Nginx服务器会将原地址的URI替换为"/"。