【问题标题】:Nginx + Thin config on Windows for Rails appWindows for Rails 应用程序上的 Nginx + Thin 配置
【发布时间】:2012-08-04 16:42:06
【问题描述】:

我对使用 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 配置文件中,我将上游服务器指定为本地主机还是机器的 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 现在正在监听它?

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

【问题讨论】:

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


    【解决方案1】:

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

    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 地址,因此这可能是您无法访问任何内容的原因。

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

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

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

    【讨论】:

    • 在阅读本文之前我已经开始工作了。虽然现在我看到我应该更改我的设置以使用 localhost (127.0.0.1) 而不是直接 IP 地址 (10.x.x.x)。感谢您为我解决问题!
    猜你喜欢
    • 2020-07-19
    • 1970-01-01
    • 1970-01-01
    • 2015-11-26
    • 2013-04-06
    • 2019-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多