[Ruby on Rails] Rails Puma + Nginx 的組合

Veck
Veck
Aug 7, 2018 · 3 min read

首先要認識一下兩者分別是什麼東西:

* Puma 是一個專為 Rails 設計的高併發 web server
* Nginx 是一個廣泛使用的 reverse proxy
這個時候可以去查一下什麼事 reverse proxy,就可以發現一張圖說明了兩者之間的關係

所謂的反向代理,是在 server-side 根據 client-side 的 request,向後端的 web server 取得資源,然後再將這些資源 response 給 client-side

另外所謂的前向代理,通常是在 client-side 的軟體,例如瀏覽器會代替 client web page (program)去向CDN請求資源

使用後端代理伺服器的好處是,假設你有很多個 web server,都統一要由單一入口給 client-side 存取,則可以把存取的工作交給 reverse proxy,例如:

Web Server:

* Home Page Web Server
* Forum Web Server
* Wiki Web Server

然後你的客戶會連線到 www.my.domain.com,此時應該存取 Home Page Web Server,但當他連線到 www.my.domain.com/forum 時,應該要存取 Forum Web Server,可是如果把你的網域綁定到 Home Page Web Server,就無法另外連線到不同伺服器了,因此可以改用反向代理伺服器,把網域綁定到這台機器上,當反向代理判斷是要存取 Home Page,就會由他向那台伺服器請求資源,而要存取 Forum 時,就另外再向論壇的伺服器請求資源

另外,反向代理伺服器還有一些對於網站應用程式來說有很大幫助的功能,例如 load balancing、auto-scaling、failover 等

load balancing 會在流量大增的時候進行分流的動作,例如你有多台 forum web server,平時每天流量上萬,為了確保伺服器能夠穩定運作,不會因為短時間的存取量太大導致伺服器處理不及而癱瘓,就可以設定將一部分的存取流量導向 standby 的那台伺服器

auto-scaling 則是可以為你正在服務的伺服器自動依據目前的流量或運算量,最大化可以分配的資源,簡單來說,你有一台伺服器的記憶體有 32GB,分配給網頁伺服器的使用量只有 2GB,如果你的網頁服務需要大量運算(例如線上資料處理或機器學習),很有可能短時間內就把 2GB用完了,因此你可以設定當監測到記憶體快要用罄,系統會自動配置更多的記憶體來應付突發的運算量

failover 則是為了免除網站服務最擔心的事 — 中斷服務(downtime),你的伺服器很有可能被 DDoS 攻擊,或是程式有 bug,使用者不小心觸發導致伺服器掛了,這個時候假如你有一台 standby 的伺服器,有設定好 failover 功能,則會在監控到主要伺服器中斷服務的時候,立刻將存取要求導向那台 standby 的伺服器,縮短 downtime 的時間

說到 DDoS 攻擊,load balancing 或其他相關功能也可以在監控到瞬間變大的流量時,自動將(不正常)流量導向其他地方,就有專門的業者,是提供流量接收的服務,讓一些容易被 DDoS 攻擊的網站服務公司將流量導像他們的伺服器,這個功能的設定也可以在反向代理完成

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade