gpt4 book ai didi

nginx - 设置 nginx 将一台服务器上的失败请求代理到另一台服务器

转载 作者:行者123 更新时间:2023-12-04 16:46:06 24 4
gpt4 key购买 nike

我正在开发一个新版本的 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)。

最佳答案

我最终使用以下配置让它与 header 和 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

关于nginx - 设置 nginx 将一台服务器上的失败请求代理到另一台服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36896821/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com