1、基本規則

我没有出家發表於2024-04-16

1、基本規則

假如後端實際地址為:

http://127.0.0.1:8080/api/user/getById?id=123

則:

1)透過nginx轉發,使用http://127.0.0.1/api/user/getById?id=123訪問

server {
        listen       80;
        server_name  127.0.0.1;
        
        location /api/ {
            proxy_pass http://127.0.0.1:8080;
        }

    }

透過原有地址直接準發非常簡單。

2)透過nginx轉發,使用http://127.0.0.1/test/api/user/getById?id=123訪問

server {
        listen       80;
        server_name  127.0.0.1;
        
        location /test/ {
            proxy_pass http://127.0.0.1:8080/;
        }

    }

這裡相當於對請求新增了字首,但在轉發的過程中是沒有字首的,故需要去掉。關鍵點就是地址後面的 "/"

2.關於斜杆"/"的案例對比

以服務地址http://127.0.0.1:8080/api/user/getById進行說明,訪問地址是http://127.0.0.1/api/user/getById。location後斜杆與proxy_pass後斜杆問題如下:

1)location、proxy_pass都不加斜槓

location /api {
  proxy_pass http://127.0.0.1:8080;
}

實際代理地址:http://127.0.0.1:8080/api/user/getById。正確的

2)location加斜槓,proxy_pass不加斜槓

location /api/ {
  proxy_pass http://127.0.0.1:8080;
}

實際代理地址:http://127.0.0.1:8080/api/user/getById。正確的

3)location不加斜槓,proxy_pass加斜槓

location /api {
  proxy_pass http://127.0.0.1:8080/;
}

實際代理地址:http://127.0.0.1:8080//user/getById。錯誤的,也出現了雙斜槓

4)location、proxy_pass都加斜槓

location /api/ {
  proxy_pass http://127.0.0.1:8080/;
}

實際代理地址:http://127.0.0.1:8080/user/getById

5)location不加斜槓,proxy_pass加"api"

location /api {
   proxy_pass http://127.0.0.1:8080/api;
}

實際代理地址:http://127.0.0.1:8080/api/user/getById。正確的

6)location加斜槓,proxy_pass加"api"

location /api/ {
   proxy_pass http://127.0.0.1:8080/api;
}

實際代理地址:http://127.0.0.1:8080/apiuser/getById。錯誤的,少了一個斜杆

7)location不加斜槓,proxy_pass加"api/"

location /api {
   proxy_pass http://127.0.0.1:8080/api/;

實際代理地址:http://127.0.0.1:8080/api//user/getById。這種情況會出現雙斜槓問題,後端在認證請求時會校驗失敗。

8)location加斜槓,proxy_pass加"api/"

location /api/ {
   proxy_pass http://127.0.0.1:8080/api/;
}

實際代理地址:http://127.0.0.1:8080/api/user/getById。正確的

可以看出,兩者加不加斜杆的區別還是很大的,不同的場景使用不同的配置即可。簡單的,要麼都不加,這樣轉發的地址是對應的。

相關文章