Windows for Rails应用程序上的Nginx + Thin配置

时间:2012-08-07 16:02:54

标签: ruby-on-rails windows configuration nginx thin

我对使用Nginx和Thin服务我的Rails 3.2应用程序感到有些困惑。以前我在Windows Server 2008 R2上使用Thin服务我的Rails应用程序没有任何问题。我会在生产服务器上启动Thin,在端口80上指定服务器的IP地址,如下所示:

rails server thin -b 10.xx.x.xxx -p 80 -e production

现在,我正在尝试将Nginx添加到混合中,我对如何启动Thin以及如何配置Nginx以转发为Thin感到困惑。

例如,现在Nginx正在侦听端口80,我应该在另一个端口上本地启动Thin吗?像0.0.0.0:3000(或127.0.0.1:3000)?或者像我之前在10.xx.x.xxx:80上那样开始瘦身?

在我的Nginx配置文件中,我是否将上游服务器指定为localhosts或机器的IP地址?我不太确定它的用途。

upstream mywebapp_thin {
  server 0.0.0.0:3000;
}

server {
    listen       80;
    server_name  mywebserver www.mywebserver;
    # locations et. al. excluded for brevity...

我看到的大多数示例都有上游服务器在端口3000或5000上运行。我想知道这些示例是否真的用于开发设置,而不是生产?或者Thin是否需要在80以外的其他端口上运行,因为Nginx现在正在监听它?

我注意到我的网络应用程序没有响应基本网址(mywebserver / projects),除非我添加端口Thin正在运行(mywebserver:3000 / projects)

1 个答案:

答案 0 :(得分:0)

你是正确的,因为nginx已经在该端口上运行,你必须在新端口上开始精简。通常最好启动一个不是用户应该在loopback接口上直接访问的服务器,以便用户无法访问它,因此启动瘦的命令应该是这样的:

rails server thin -b 127.0.0.1 -p 3000 -e production

完成此操作后,您应将upstream块更改为:

upstream mywebapp_thin {
  server 127.0.0.1:3000;
}

也就是说,如果您没有多个上游,则使用上游模块无法获得任何收益。您应该proxy_pass直接到您的上游。实际上,0.0.0.0不是有效的IP地址,因此这可能是您无法访问任何内容的原因。

我还注意到www.mywebserver.com指令中没有webserver.comserver_name,不确定是否故意将其遗漏。

提出请求时错误日志说了什么?如果这些更改无法解决您的问题,您可能需要发布错误日志以及完整配置。

另外,如果您在Windows上进行部署,可以考虑使用JRuby并使用trinidad作为服务器而不是瘦服务器,或使用warbler打包您的应用程序以便它可以部署在您选择的Java应用程序服务器上。但是,这并不会改变您的nginx配置。