我正在使用 Nginx 1.14.0 在 Ubuntu VM 上提供一些服務。在我的服務器定義中,我包含了一個位置塊,旨在轉發來自/api/v{version}/users{suffix}版本應該是 1.0 或 2.1 之類的數字的請求,并且后綴可以為空,也可以是路由的一部分。我的目標是轉發到localhost:5006/v{version}/users{suffix}。我以這種方式做事的原因是我也有/api/v{version}/rooms{suffix}和/api/v{version}/prompts{suffix}這些去不同的埠。目前,我的位置塊如下所示:
location ~ ^\/api\/v(([0-9] )\.([0-9] ))\/users(.*)$ {
proxy_pass https://localhost:5006/v$1/users$2;
proxy_http_version 1.1;
proxy_pass_request_headers on;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
但是,當我嘗試打電話時,/api/v1.0/users/31245我得到一個 502,并且在檢查我的錯誤日志時,我看到了這個:
[錯誤] 2591#2591: *6052 沒有定義決議器來決議本地主機,客戶端:[MY_IP_ADDR],服務器:[SERVER_NAME],請求:“GET /api/v1.0/users/158015ab-3811-4137-8a13-102d9b400050 HTTP/1.1"
這似乎正在發生,因為請求無法與位置匹配。我已經在幾個不同的 Nginx 測驗儀上對此進行了測驗,它似乎可以作業,所以我在這里做錯了什么?
uj5u.com熱心網友回復:
在proxy_pass陳述句中使用變數需要 Nginx 使用決議器。有關詳細資訊,請參閱此檔案。
要么指定一個resolver陳述句,或者更好的是,重寫塊以避免在proxy_pass陳述句中使用變數。
例如:
location ~ ^/api/v[0-9] \.[0-9] /users {
rewrite ^/api(.*)$ $1 break;
proxy_pass https://localhost:5006;
...
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/468605.html
