Eine der Rails-Bereitstellungslösungen besteht darin, Apache als Reverse Proxy zu verwenden, um Anfragen an den Anwendungsserver (z. B. Phusion Passenger) weiterzuleiten. Wie interagiert Apache als Reverse-Proxy-Server mit dem dahinter liegenden Anwendungsserver?
Mein Apache lauscht zum Beispiel auf Port 1080 und überprüft die Prozessinformationen:
> 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是父进程,其余的是子进程
Wenn eine Anfrage eingeht, geht sie zuerst an Apache. Apache weist einen Prozess aus diesen Prozessen zu, um die Anfrage zu bearbeiten (z. B. wird der Prozess 8391 zugewiesen). Was wird der Prozess 8391 tun? Wird er diese Anfrage an den nachfolgenden Anwendungsserver (Phusion Passenger) weiterleiten? Wenn ja, verfügt der Anwendungsserver auch über einen eigenen unabhängigen Prozess? Oder kann der Prozess 8391 als Anwendungsserverprozess betrachtet werden und diese Anfrage selbst bearbeiten?
Wie interagiert Apache mit dem dahinter hängenden Anwendungsserver?
看到这个问题很久了当时没有回答,现在来回答一下。
ruby语言是有http相关api的,你甚至可以自己写一个简略的静态文件服务器。而且有许多强大的gem提供类似服务。
PHP语言在Apache下的最普遍运行方式是作为它的插件,换句话说就是把Apache变的可以响应php文件请求了。
而用rails s或者thin等web服务器来启动服务也是完全可以的,只是不管是对浏览者还是对开发者而言,都没有那么好用而已。
如果你配置的是反向代理的话,那么 Apache 接下来会充当一个 HTTP 客户端,以把同样的请求发给应用服务器,得到结果之后再发给真正的客户端。
你起了apache之后它就会有十几二十个进程起来(这要看你的配置了)
然后在apache收到request之后有一个进程会处理它,如果它符合反向代理的条件,就会把request发送到你的应用服务器
其实应用服务器应该也是能够直接访问的(除非有什么防火墙啊之类的)
反正就是应用服务器收到了request,然后传回一个response给apache
apache再把response传回给浏览器
不过在这过程中可能还需要配置下对于response中间的html里面的url的改写