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替換為"/"。
轉載于:https://www.cnblogs.com/linst/p/10282979.html