我正在研究一個新版本的api,它是對當前api的完全重寫。首先,新的api不會處理任何請求,但隨着時間的推移,越來越多的路由將在新的api中實現(其中大多數使用與舊api中使用的路徑相同的路徑)。我將nginx設置在與新的api服務(在端口3000上運行的節點)相同的服務器上,並且舊的api服務正在api.example.com(192.168.1.25)上運行。我想要做的是將api.example.com指向新的api服務,然後當有請求進入時,讓nginx首先嚐試請求新的api服務(127.0.0.1:3000),如果該請求返回404 ,然後將請求發送到舊的api服務(192.168.1.25)。設置nginx將一個服務器上的失敗請求代理到另一個服務器
3
A
回答
1
如果您設置的端點使用「upstream」,那麼你就可以配置proxy_pass切換嘗試the next upstream 404上
upstream api {
# new
server localhost:3000;
# old
server 129.168.1.25:3000 backup;
}
location/{
proxy_pass http://api;
proxy_next_upstream http_404 non_idempotent;
}
一件事不過,我不能確定是你是否能真正切換到「備份」服務器作爲proxy_next_upstream的一部分,因爲從技術上講服務器是健康的。
2
我最終得到這個使用以下配置的標題和cookie支持。
http {
upstream new_api_backend {
server 127.0.0.1:3000;
}
upstream old_api_backend {
server old.example.com:443;
}
server {
listen 80;
return 301 https://$http_host$request_uri;
}
server {
proxy_http_version 1.1;
listen 443;
ssl on;
ssl_certificate /etc/nginx/ssl/my_cert.crt;
ssl_certificate_key /etc/nginx/ssl/my_cert.key;
location/{
proxy_intercept_errors on;
error_page 417 = @old_backend;
proxy_pass http://new_api_backend;
}
location @old_backend {
proxy_set_header Host old.example.com;
proxy_redirect https://old.example.com/ https://$http_host/;
proxy_cookie_domain old.example.com $http_host;
proxy_pass https://old_api_backend;
}
}
}
請注意error_page 417 = @old_backend
。這使得nginx可以捕獲來自新服務器的417
響應,作爲使用舊服務器的觸發器。然後,我只是向新服務器添加了一個catchall路由來返回417
,這樣404
仍然可以在新服務器上適當使用。 417 Expectation Failed
可能不是這個用例最合適的代碼,但它看起來足夠接近。
此外,這將正確代理http://example.com/some/path
到https://old.example.com/some/path
。
相關問題
- 1. Nginx上的反向代理服務器從一臺服務器到另一臺
- 2. 在QT上請求一個代理服務器上的webservice
- 3. NGINX配置代理到Sinatra服務器的SSL請求
- 4. 轉發請求從一個node.js服務器到另一個
- 5. Laravel:HTTP請求到另一臺服務器
- 6. POST請求到一個REST服務器
- 7. Web服務在一臺服務器上失敗(401未授權),但在另一臺服務器上失敗
- 8. 使用nginx將請求代理到兩個不同的服務?
- 9. 在C:代理HTTP請求到另一臺服務器
- 10. 我可以將一個http請求從一個node.js或python服務器轉發到另一臺服務器嗎?
- 11. Nginx重寫到服務器上的另一個路徑
- 12. 請求在另一個域/服務器上的內容
- 13. 假https請求失敗服務器
- 14. 服務器獲取請求失敗
- 15. 如何將SSIS包從一個服務器移動到另一個服務器
- 16. 將文件從一個服務器複製到另一個服務器
- 17. 設置代理服務器
- 18. 發送請求到另一個域從服務器
- 19. 將WCF服務部署到另一個Sharepoint服務器
- 20. NGINX服務器不能代理到服務器
- 21. 使用請求或axios nodejs將文件上傳到另一個服務器
- 22. 在同一臺服務器上配置多個位置的nginx
- 23. 將http請求重定向到https在nginx服務器上
- 24. 將系統設置從一個CRM2011服務器複製到另一個
- 25. PHP。將請求按原樣轉發到另一臺服務器
- 26. mysql從一個服務器插入到另一個mysql服務器?
- 27. 服務器上請求多少個Collection.find()?
- 28. Android:代理(中繼)服務器請求
- 29. JSESSIONID問題當Tomcat服務器作爲另一個Tomcat服務器的代理服務器
可能不是「備份」,你可以做weight = 0; –