天天看點

nginx 反向代理學習1

  

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