nginx中location中關於proxy_pass和rewrite的應用

來源:互聯網
上載者:User

標籤:

1,問題描述
 upstream datacollectbackend{      #ip_hash;      server 10.234.1.211:6100 max_fails=5 fail_timeout=30s;      server 10.234.1.26:7100 max_fails=5 fail_timeout=30s;    }       location ~* ^/OCC_DATACO_WEB/.*$ {           include deny.conf;           proxy_pass http://datacollectbackend;           include proxy.conf;           error_log  logs/datacollection_error.log error;           access_log  logs/datacollection_access.log  main;       }

現在就是覺得OCC_DATACO_WEB名字太長了,想換成dt,但是工程還沒有上線,需要先做個測試,就是讓www.ds.com/dt/possystem去調用OCC_DATACO_WEB工程裡面去。

也就是說以前用www.ds.com/OCC_DATACO_WEB/possystem訪問,現在改成www.ds.com/dt/possystem訪問。但是線上工程還是OCC_DATACO_WEB,但是現在dt工程還沒有做完,處於過渡期要等新的dt完善後在移除OCC_DATACO_WEB換成dt

原blog地址:http://blog.csdn.net/mchdba/article/category/5981097 ,未經過原csdn博主mchdba允許,不得轉載。

2,用location的proxy_pass做跳轉

直接將dt的跳轉到和 OCC_DATACO_WEB一樣的proxy_pass,如下所示

 location ~* ^/dt/.*$ {           include deny.conf;           proxy_pass http://datacollectbackend;           include proxy.conf;          error_log  logs/dt_error.log error;          access_log  logs/dt__access.log  main;        }   

然後重啟nginx,通過www.ds.com/dt/possystem訪問,結果報錯如下:

Sorry,找不到該頁面您使用的URL可能拼字有誤,該頁可能已經移動,或者它可能只是臨時離線。重新鍵入正確網址,或者返回首頁
3,用rewrite來取代location
    location ~* ^/dt/.*$ {          rewrite /dt/(.*) /OCC_DATACO_WEB/$1 break;        }
然後重啟nginx,使用www.ds.com/dt/possystem訪問,已經生效了,成功了。
4,總結

rewrite功能就是,使用nginx提供的全域變數或自己設定的變數,結合Regex和標誌位實現url重寫以及重新導向。rewrite只能放在server{},location{},if{}中,並且只能對網域名稱後邊的除去傳遞的參數外的字串起作用,例如 http://seanlook.com/a/we/index.php?id=1&u=str 只對/a/we/index.php重寫。文法rewrite regex replacement [flag];

如果相對網域名稱或參數字串起作用,可以使用全域變數匹配,也可以使用proxy_pass反向 Proxy。
表明看rewrite和location功能有點像,都能實現跳轉,主要區別在於rewrite是在同一網域名稱內更改擷取資源的路徑,而location是對一類路徑做控制訪問或反向 Proxy,可以proxy_pass到其他機器。很多情況下rewrite也會寫在location裡,它們的執行順序是:

執行server塊的rewrite指令
執行location匹配
執行選定的location中的rewrite指令
如果其中某步URI被重寫,則重新迴圈執行1-3,直到找到真實存在的檔案;迴圈超過10次,則返回500 Internal Server Error錯誤。

本次實踐中,是需要將dt的工程訪問都指向OCC_DATACO_WEB工程裡面去,所以需要僅僅location加proxy_pass是不夠的,需要rewrite的。

nginx中location中關於proxy_pass和rewrite的應用

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.