在服务器上安装了 nginx,配置、启动了 nginx,就能访问项目的页面了。这时候 thin 服务要开启吗?求解答
要。
nginx 一般只作为代理服务器,是前端;thin 是后端服务器。 比如你运行 4 个 thin,打开 4000-4004 4 个端口,nginx 打开 80 端口,把访问 80 的请求随机转发到那 4 个端口上去。
关键你 rails 想以什么 rack server 启动,如果你没用 thin,而又可以访问的了 rails 的动态页面,那么你可定已默认的 rails server 启动了,
举例就是 nginx 是一根粗水管,rails 自带 server 是一根细水管,你现在前面接的粗水管接上后面根细水管,所以最后的出水量不会很大
如果用了 thin 的话,前面接的粗水管(nginx)接上后面根粗水管(thin),这样出水量就会大很多
按http://ruby-china.org/wiki/install-rails-on-ubuntu-12-04-serverpassenger安装了nginx,配置也差不多就是上述文章里说的那样,这里面的步骤使用 server { listen 80; server_name you.host.name; # 请替换成你网站的域名 rails_env production; root /home/jason/www/gitlab/public; passenger_enabled on;
location ~ ^(/assets) { access_log off; # 设置 assets 下面的浏览器缓存时间为最大值(由于 Rails Assets Pipline 的文件名是根据文件修改产生的 MD5 digest 文件名,所以此处可以放心开启) expires max; }
**不懂的是 1、没有配置 thin 或其实内容服务器,直接能通过 you.host.name 访问到服务器,项目 log 目录下也生成了访问日志,OK,我理解成 nginx 会自动启动 WEBrick/Thin。可如果他会自动启动 WEBrick/Thin,那么还要启动 thin 吗???**
#12 楼 @huzhennan5793 你如果根据教程做的话,已经用了 Passenger
nginx 作为反向代理,在接收到 web 请求时作为请求的代理向 thin 分发 http 请求,在 thin 处理完毕后把结果返回给 nginx,nginx 再作为响应的代理把 thin 的请求返回给发起请求的客户端
#5 楼 @huzhennan5793 Nginx 是提供静态文件和转发动态请求到 Rails,参考配置 https://gist.github.com/swordray/8882089