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

前端之家收集整理的这篇文章主要介绍了设置Nginx以将一台服务器上的失败请求代理到另一台服务器 前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我正在开发一个新版本的api,它是对当前api的完整重写.首先,新api将不会处理任何请求,但是随着时间的流逝,新api中将实现越来越多的路由(大多数路由使用的路径与旧api中使用的路径相同).我在与新api服务(节点在端口3000上运行)所在的服务器上设置了Nginx,而旧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).

最佳答案
我最终使用以下配置使它与标题和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响应作为使用旧服务器的触发器.然后,我刚刚向新服务器添加了一条通配路由,以返回417,这样,当在新服务器上适当时,仍可以使用404s. 417 Expectation Failed可能不是此用例的最合适代码,但看起来足够接近.

另外,这会将http://example.com/some/path正确代理到https://old.example.com/some/path.

猜你在找的Nginx相关文章