Ruby on rails Nginx+;Windows for Rails应用程序的精简配置

Ruby on rails Nginx+;Windows for Rails应用程序的精简配置,ruby-on-rails,windows,configuration,nginx,thin,Ruby On Rails,Windows,Configuration,Nginx,Thin,我对使用Nginx和Thin为Rails 3.2应用程序提供服务感到有些困惑。以前我让Thin在WindowsServer2008R2上为我的Rails应用程序提供服务,没有任何问题。我将在生产服务器上启动精简,在端口80上指定服务器的IP地址,如下所示: rails server thin -b 10.xx.x.xxx -p 80 -e production 现在,我正在尝试将Nginx添加到混合中,我对如何开始精简以及如何配置Nginx以转发到精简感到困惑 例如,既然Nginx正在监听端口

我对使用Nginx和Thin为Rails 3.2应用程序提供服务感到有些困惑。以前我让Thin在WindowsServer2008R2上为我的Rails应用程序提供服务,没有任何问题。我将在生产服务器上启动精简,在端口80上指定服务器的IP地址,如下所示:

rails server thin -b 10.xx.x.xxx -p 80 -e production
现在,我正在尝试将Nginx添加到混合中,我对如何开始精简以及如何配置Nginx以转发到精简感到困惑

例如,既然Nginx正在监听端口80,我是否应该在另一个端口本地启动精简?比如0.0.0.0:3000(或者127.0.0.1:3000)?或者我是不是像以前10.xx.x.xxx:80时那样开始变瘦了?

在我的Nginx conf文件中,我是将上游服务器指定为本地主机还是机器的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上运行。我想知道这些示例是否真的用于开发设置,而不是生产?或者,既然Nginx正在监听Thin,Thin是否需要在80以外的其他端口上运行


我注意到我的web应用程序不会响应基本URL(mywebserver/projects),除非我添加运行精简的端口(mywebserver:3000/projects)

由于nginx已经在该端口上运行,因此必须在新端口上启动精简,这是正确的。通常,最好启动一个服务器,而不是用户应该在环回接口上直接访问的服务器,这样用户就无法访问它,因此启动精简的命令应该类似于:

rails server thin -b 127.0.0.1 -p 3000 -e production
完成此操作后,您应该将
上游
块更改为:

upstream mywebapp_thin {
  server 127.0.0.1:3000;
}
也就是说,如果没有多个上游,那么使用上游模块将一无所获。您应该直接将代理传递给上游。事实上,
0.0.0.0
不是有效的IP地址,所以这可能就是您无法访问任何内容的原因

我还注意到,您在
server\u name
指令中没有
www.mywebserver.com
webserver.com
,不确定您是否故意遗漏了这一点

当您发出请求时,错误日志会显示什么?如果这些更改不能解决您的问题,您可能需要发布错误日志和完整配置


在一个旁注下,如果您在Windows上部署,您可能会考虑使用JRuBy并使用服务器而不是瘦,或者使用包来打包应用程序,以便可以将其部署在您选择的java应用服务器上。不过,这不会改变您的nginx配置。

在阅读本文之前,我已经让它工作了。虽然现在我明白了,我应该将设置更改为使用localhost(127.0.0.1)而不是直接IP地址(10.x.x.x)。谢谢你帮我把事情弄清楚!