我对使用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)
答案 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.com
或server_name
,不确定是否故意将其遗漏。
提出请求时错误日志说了什么?如果这些更改无法解决您的问题,您可能需要发布错误日志以及完整配置。
另外,如果您在Windows上进行部署,可以考虑使用JRuby并使用trinidad作为服务器而不是瘦服务器,或使用warbler打包您的应用程序以便它可以部署在您选择的Java应用程序服务器上。但是,这并不会改变您的nginx配置。