nginx 根据URL路径分离线程

ercv8c1e  于 2023-05-06  发布在  Nginx
关注(0)|答案(2)|浏览(222)

我正在使用Puma和Nginx来运行我的Rubinius应用程序。
我想分离我的URL请求。
第一个用于API请求,第二个用于其他请求。
我认为Puma已经实现了线程化,但我想确保Web请求不会阻塞线程,这会导致我的API请求停止。我假设如果一个线程很忙碌,Puma会创建另一个线程,但我想确保这个线程始终可用于API请求。
我这里的主要观点是为URL请求“保存”一个线程,这是我的用户最需要的。

yhuiod9q

yhuiod9q1#

由于Puma在单独的线程中考虑每个请求,因此这里唯一的瓶颈是这些线程对数据库的访问。除此之外,你不能保证某些线程比其他线程“更好”。
这里值得注意的一个可能的解决方案是使用nginx处理它。假设您的应用正在http://some_host.com上提供内容,而APIhttp://some_host.com/api中可用。您可以将nginx配置为分别处理http://some_host.comhttp://some_host.com/api的请求。在本例中,您需要Puma服务器的两个独立示例。一个用于基础应用程序,一个用于API请求。我这里的意思是,当一个请求来到http://some_host.com时,它由Puma A处理,当到达http://some_host.com/api/...时,它由Puma B处理。
请记住一件事,您可以通过单独的示例处理请求,但您仍然只有一个数据库,除非您正在缓存内容。又来了一个问题你缓存你的内容吗?如果没有,那么首先从缓存开始不是更好的主意吗?

p1tboqfb

p1tboqfb2#

为什么不将主应用程序和API分开?使用Nginx很容易服务两个不同的应用程序:

location / {
    proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header  X-Forwarded-Proto $scheme;
    proxy_set_header  Host $http_host;
    proxy_redirect    off;
    proxy_pass        http://puma1;
  }

  location /api/ {
    proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header  X-Forwarded-Proto $scheme;
    proxy_set_header  Host $http_host;
    proxy_redirect    off;
    proxy_pass        http://puma2/;
  }

请注意第二个位置proxy_pass的尾部斜杠,它有助于重写请求并省略'/API'前缀。

相关问题