ruby-on-rails – Wie Apache mit Anwendungsservern interagiert
为情所困
为情所困 2017-05-16 17:03:37
0
3
783

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?

为情所困
为情所困

Antworte allen(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的改写

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage