【问题标题】:How Apache communicate with an Application ServerApache 如何与应用服务器通信
【发布时间】:2014-08-29 06:49:51
【问题描述】:

我使用 Apache 作为反向代理,在它后面我使用Phusion Passenger(a Rails Server) 作为应用服务器 。我对 Apache 如何与 Phusion Passenger(其背后是 Application Server)通信感到困惑。 这是我从httpd 得到的:

> 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
... # showing that 8353 forks 10 process, and 8353 is the father process

当一个 HTTP 请求到来时,Apache 分配一个进程来处理这个请求(例如进程 8391),将它传递给应用服务器。

我的问题是,这到底是怎么回事? Apache 如何与应用服务器通信?我认为不同的应用服务器在这种情况下是相似的。

8391 是否将请求传递给 Phusion Passenger?如果是这样,Phusion Passenger 应该有自己独立的进程运行,对吧?或者8391可以看作是PhusionPassenger进程,它可以自己处理请求?

【问题讨论】:

    标签: apache http webserver passenger reverse-proxy


    【解决方案1】:
    • Apache 接受线程产生的请求
    • 它将请求发送回您的应用服务器。
    • 在收到应用服务器的响应之前,Apache 线程将处于等待/运行状态。
    • Apache 向客户端发回请求。
    • Apache 在确认数据后关闭连接。
    • 一旦 apache 确认数据,应用服务器线程就会关闭。

    【讨论】:

    • 你的意思是Apache有自己的进程,Application server也有自己的进程?但是 Apache 是如何知道应用服务器的进程/端口的呢? Apache监听port1,Application server监听port2,port1不等于port2吧?
    • 您已使用 Apache 作为反向代理,其中您提到了应用程序服务器连接到哪个端口的详细信息。 Apache 和应用程序都将被捆绑以期望应用程序对 Apache 的响应。端口只会有助于确定要连接到哪个端口。一般情况下的 Apache 或应用程序将具有基于标头/会话和许多其他事物的唯一性,以响应附加到它的适当进程。
    • 我在httpd.conf中找到了Listen 1080这一行,是不是说明应用服务器正在使用1080端口?
    • 问这个问题的目的是什么,和你原来的帖子不明白。
    • 是的,您的理解是正确的,并在我上面的回答中进行了简要说明。我相信它会有所帮助。
    猜你喜欢
    • 2014-09-26
    • 1970-01-01
    • 2013-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多