如题,为什么生产环境需要两个服务器,他们都分别做了什么。
静态内容就是一些资源文件,比如图片,css, js 等文件,这些东西一般放在 public 目录下,即使开发的时候是放在 assets 目录下,最后部署的时候 rails 还是会把它们处理后放到 public 目录下
对于楼上回答的、楼主可以看看这个两个文件
config/environments/development.rb
和 config/environments/prodduction.rb
里面的 这个配置
config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present?
然后呢,其实 Nginx 还有很多其他的功能。比如转发 WebSocket。比如你有好多的 Puma 实例需要分配权重?
nginx 是 web 服务器,比如还有 apache
但是只有 nginx,无法使用 rails 程序,必须有东西来连接 web 服务器和 rails 程序
这个程序就是 puma,也叫 rack 服务器,类似的还有 unicorn 等
只有 puma 好像也可以跑起来,但是它只有十几个线程,同时请求太多就不行了
nginx 的连接数可以有上千个,可以同时处理更多请求
一个 nginx 后面可以有 n 个网站,nginx 负责把域名转发到后端,静态文件转发到文件系统,动态的内容交给容器(puma、tomcat)自己管理,当然也可以转发给另外一个 nginx 或是 IIS、Apache。
理论上你可以让 puma 承担所有工作,只是说 puma 是基于 ruby 的 , 效率没有基于 nginx 的高
比如你开一个 puma 进程,进程再跑 20 个线程
但是很有可能你一个网站就有超过 5 个静态资源,之后只要有 4 个访问并发,你 puma 的线程数就占完了,新访问就没办法进来了
而 nginx 首先在处理静态资源的情况下效率就比 puma 高很多,对 wait 的处理也非常好,对于静态资源,几千个并发随便来,
同时就算 puma 资源耗完了,nginx 也可以先将连接进入 wait 状态,等待 puma 可以接受新资源了,再进行转发
再就是一些跟网站本身没有多大联系的功能,比如 SSL 证书,或者多个网站部署到同一个 ip 等等,要说用 puma 可以不可以实现,也可以,但是复杂性大大增强了,耦合性也急速的膨胀。然而对于这种东西,nginx 处理起来驾轻就熟,直接上配置就好了
总结下来,就是专业的事情,专业的工具来干。用螺丝刀也可以钉钉子,但是如果有锤子,还是上锤子比较好