1

我对使用 Nginx 和 Thin 为我的 Rails 3.2 应用程序提供服务感到有些困惑。以前我让 Thin 在 Windows Server 2008 R2 上为我的 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 上一样开始 Thin?

在我的 Nginx conf 文件中,我是否将上游服务器指定为 localhost 或机器的 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 现在正在监听它?

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

4

1 回答 1

0

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

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.comwebserver.comserver_name指令中,不确定您是否故意将其遗漏。

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

附带说明一下,如果您在 Windows 上进行部署,您可能会考虑使用 JRuby 并使用trinidad作为服务器而不是瘦服务器,或者使用warbler来打包您的应用程序,以便可以将其部署在您选择的 Java 应用程序服务器上。不过,这不会改变您的 nginx 配置。

于 2012-08-09T03:18:48.223 回答