ruby-on-rails - Apache是​​如何與應用程式伺服器互動的
为情所困
为情所困 2017-05-16 17:03:37
0
3
806

Rails的部署方案中,有一種是Apache作為Reverse Proxy,把請求轉寄給應用程式伺服器(比如說Phusion Passenger)。 Apache作為反向代理伺服器,是如何與後面的應用程式伺服器互動的?
例如我的Apache監聽1080端口,查了一下進程資訊:

> ps aux | grep /MyWebsite/bin/httpd
googly    8353  0.0  0.0  73856  3280 ?        Ss   Aug26   0:00 /MyWebsite/bin/httpd -d /MyWebsite -f var/state/apache-1080/httpd.conf
googly    8391  0.0  0.0  73856  1828 ?        S    Aug26   0:00 /MyWebsite/bin/httpd -d /MyWebsite -f var/state/apache-1080/httpd.conf
... # 起了10个进程,并且我知道8353是父进程,其余的是子进程

當一個請求到來,首先會到Apache,Apache會從這些進程中分配一個進程來處理這個請求(例如分配了8391這個進程),那麼8391這個進程會做什麼呢?他是會把這個請求轉發給後面的應用程式伺服器(Phusion Passenger)嗎?如果是這樣,那麼應用伺服器是不是也有自己獨立的進程?還是說8391這個進程就已經可以當成應用伺服器的進程了,他自己就能處理這個請求?
Apache是​​如何與掛在他後面的應用程式伺服器互動的呢?

为情所困
为情所困

全部回覆(3)
过去多啦不再A梦

看到這個問題很久了當時沒有回答,現在來回答。

Rails是自備web伺服器的,負責監聽特定連接埠提供服務。

ruby語言是有http相關api的,你甚至可以自己寫一個簡單的靜態檔案伺服器。而且有許多強大的gem提供類似服務。

Apache是​​專業的http伺服器,原則上只能夠回應最基礎的靜態檔案。

PHP語言在Apache下最普遍的運作方式是作為它的插件,換句話說就是把Apache變的可以回應php檔案請求了。

用Apache搭配Phusion Passenger來部署Rails應用主要是為了有更優雅的錯誤提示和自動化的錯誤處理(主要是重啟),還有更完善的日誌系統以及高級功能如負載平衡等。

而用rails s或thin等web伺服器來啟動服務也是完全可以的,只是不管是對瀏覽者還是對開發者而言,都沒有那麼好用而已。

如果你不需要自動錯誤處理其實用nginx反向代理rails s或thin的連接埠是最好的選擇。

洪涛

如果你配置的是反向代理的話,那麼 Apache 接下來會充當 HTTP 用戶端,以把同樣的請求發給應用程式伺服器,得到結果之後再發給真正的客戶端。

刘奇

你起了apache之後它就會有十幾二十個進程起來(這要看你的配置了)
然後在apache收到request之後有一個程序會處理它,如果它符合反向代理的條件,就會把request發送到你的應用伺服器
其實應用程式伺服器應該也是能夠直接存取的(除非有什麼防火牆啊之類的)
反正就是應用程式伺服器收到了request,然後傳回一個response給apache
apache再把response傳回瀏覽器
不過在這過程中可能還需要設定下對於response中間的html裡面的url的改寫

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板