搜尋

首頁  >  問答  >  主體

ruby-on-rails - Apache是​​如何與應用程式伺服器互動的

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是​​如何與掛在他後面的應用程式伺服器互動的呢?

为情所困为情所困2807 天前834

全部回覆(3)我來回復

  • 过去多啦不再A梦

    过去多啦不再A梦2017-05-16 17:05:37

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

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

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

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

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

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

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

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

    回覆
    0
  • PHP中文网

    PHP中文网2017-05-16 17:05:37

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

    回覆
    0
  • 怪我咯

    怪我咯2017-05-16 17:05:37

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

    回覆
    0
  • 取消回覆