如何使用NGINX部署Ruby Rack应用程序

ddi*_*hev 12 ruby rack nginx

我想用NGINX部署一个简单的Ruby Rack服务.我在互联网上阅读了各种各样的东西,其中没有一个是有用的.让我说我有这个(实际上它有点复杂,但仍然<200行代码服务):

require 'rack'

class HelloWorld
  def call(env)
    [200, {"Content-Type" => "text/plain"}, ["Hello world!"]]
  end
end

Rack::Handler::Mongrel.run HelloWorld, Port: 9292
Run Code Online (Sandbox Code Playgroud)

我想知道用NGINX部署它的最佳方法是什么.也许是FCGI还是其他什么?

小智 15

这是一个基本的nginx配置,用于你正在使用的案例unicorn/ thin解决方案:

upstream rack_upstream {
  server 127.0.0.1:9292;
}

server {
  listen       80;
  server_name  domain.tld;
  charset UTF-8;

  location / {

    proxy_pass http://rack_upstream;
    proxy_redirect     off;
    proxy_set_header   Host             $host;
    proxy_set_header   X-Real-IP        $remote_addr;
    proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
  }

  location ~* ^.+\.(jpg|jpeg|gif|png|css|js)$ {
    root /path/to/static/files;
  }
}
Run Code Online (Sandbox Code Playgroud)

如果你以root身份运行nginx,你就可以在端口80上为你的站点提供服务.

否则listen 80改为listen SOME-AVAILABLE-PORT

替换domain.tld为您的站点名称

你也可以在(jpg|jpeg|gif|png|css|js)正则表达式中添加nginx服务的文件扩展名,并用它们分隔|

更多信息请访问:

http://wiki.nginx.org/DirectiveIndex

http://wiki.nginx.org/ServerBlockExample

http://wiki.nginx.org/FullExample


Fre*_*ung 9

最容易的事情可能是乘客,它允许nginx服务(除其他外)任何基于机架的应用程序.它很容易设置,但由于nginx没有可加载的模块,你必须从源代码安装nginx(安装程序会为你处理所有这些).

另一种流行的方法是让nicx代理到独角兽.Unicorn是一个ruby网络服务器,可以托管任何机架应用程序.通常,您让nginx处理静态资产并将其余部分发送给独角兽.与薄型,杂种等相比,Unicorn具有一些不错的功能,例如它可以开箱即用地处理无缝重启.