nginx中proxy_pass的斜杠配置


nginx中proxy_pass的斜杠配置

  

  Nginx的 官網將proxy_pass分為兩種類型:
  • 不帶URI方式:只包含IP和端口號的,不帶uri(單個/也算uri),比如proxy_pass http://localhost:8080
  • 帶URI方式:在端口號之后有其他路徑的,包含了只有單個/的如proxy_pass http://localhost:8080/,以及其他路徑,比如proxy_pass http://localhost:8080/abc

一、URL末尾存在 uri

  處理邏輯:代理請求時,會先將請求的uri中和location匹配的部分替換成 proxy_pass 指定的uri,再將最終的uri拼接到代理地址,才是最終訪問的url,如:

location /proxy {
	proxy_pass http://127.0.0.1:8099/svr1;  # uri為'/svr1'
}

  有如下請求:http://localhost:8088/proxy/index.html
  詳細解析:

  請求的uri:/proxy/index.html
  location匹配的部分:/proxy
  proxy_pass 指定的uri:/svr1
  最終的uri:/svr1/index.html (將請求的uri中和location匹配的部分替換成 proxy_pass 指定的uri)
  代理地址:http://127.0.0.1:8099
  最終訪問的url:http://127.0.0.1:8099/svr1/index.html
  即訪問 http://localhost:8088/proxy/index.html,實際請求路徑為 http://127.0.0.1:8099/svr1/index.html  

二、URL末尾不存在 uri

  處理邏輯:代理請求時,直接將請求的uri拼接到代理地址,就是最終訪問的url,如:

location /proxy2 {
	proxy_pass http://127.0.0.1:8099;  # 無uri
}
   有如下請求:http://localhost:8088/proxy2/index.html   
  詳細解析:  
   請求的uri:/proxy2/index.html
   代理地址:http://127.0.0.1:8099
   最終訪問的url:http://127.0.0.1:8099/proxy2/index.html
   即訪問 http://localhost:8088/proxy2/index.html,實際請求路徑為 http://127.0.0.1:8099/proxy2/index.html

下面的幾個例子加深理解:

server {
   listen       80;
   server_name  localhost;

   location /api1/ {
           proxy_pass http://localhost:8080;
        }
   # http://localhost/api1/xxx -> http://localhost:8080/api1/xxx


   location /api2/ {
           proxy_pass http://localhost:8080/;
        }
   # http://localhost/api2/xxx -> http://localhost:8080/xxx


   location /api3 {
           proxy_pass http://localhost:8080;
        }
   # http://localhost/api3/xxx -> http://localhost:8080/api3/xxx


   location /api4 {
           proxy_pass http://localhost:8080/;
        }
   # http://localhost/api4/xxx -> http://localhost:8080//xxx,請注意這里的雙斜線,好好分析一下。


   location /api5/ {
           proxy_pass http://localhost:8080/haha;
        }
   # http://localhost/api5/xxx -> http://localhost:8080/hahaxxx,請注意這里的haha和xxx之間沒有斜杠,分析一下原因。

   location /api6/ {
           proxy_pass http://localhost:8080/haha/;
        }
   # http://localhost/api6/xxx -> http://localhost:8080/haha/xxx

   location /api7 {
           proxy_pass http://localhost:8080/haha;
        }
   # http://localhost/api7/xxx -> http://localhost:8080/haha/xxx

   location /api8 {
           proxy_pass http://localhost:8080/haha/;
        }
  # http://localhost/api8/xxx -> http://localhost:8080/haha//xxx,請注意這里的雙斜杠。
}

 

參考:

https://markix.blog.csdn.net/article/details/107072652

https://www.jianshu.com/p/c751250a5112


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM