L'une des solutions de déploiement Rails consiste à utiliser Apache comme proxy inverse pour transmettre les requêtes au serveur d'applications (tel que Phusion Passenger). En tant que serveur proxy inverse, comment Apache interagit-il avec le serveur d'applications derrière lui ?
Par exemple, mon Apache écoute le port 1080 et vérifie les informations du processus :
> 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是父进程,其余的是子进程
Lorsqu'une requête arrive, elle ira d'abord à Apache. Apache allouera un processus parmi ces processus pour gérer la requête (par exemple, le processus 8391 est alloué), alors que fera le processus 8391 ? Va-t-il transmettre cette demande au serveur d'application suivant (Phusion Passenger) ? Si oui, le serveur d’applications dispose-t-il également de son propre processus indépendant ? Ou le processus 8391 peut-il être considéré comme un processus de serveur d'applications et peut-il gérer cette requête par lui-même ?
Comment Apache interagit-il avec le serveur d'applications qui se trouve derrière lui ?
Je vois cette question depuis longtemps et je n’y ai pas répondu à l’époque. Laissez-moi y répondre maintenant.
Le langage Ruby possède des API liées à http et vous pouvez même écrire vous-même un simple serveur de fichiers statiques. Et il existe de nombreux joyaux puissants qui fournissent des services similaires.
La manière la plus courante pour le langage PHP de s'exécuter sous Apache est son plug-in. En d'autres termes, Apache est modifié pour répondre aux requêtes de fichiers php.
Il est également possible d'utiliser des serveurs Web tels que rails s ou Thin pour démarrer des services, mais ce n'est pas si simple à utiliser pour les navigateurs et les développeurs.
Si vous configurez un proxy inverse, Apache agira alors comme un client HTTP pour envoyer la même requête au serveur d'application, puis enverra le résultat au client réel.
Après avoir démarré Apache, il y aura plus de dix ou vingt processus (cela dépend de votre configuration)
Ensuite, après qu'Apache ait reçu la demande, un processus la traitera. Si elle remplit les conditions du proxy inverse, la demande sera envoyée à votre serveur d'applications
. En fait, le serveur d'applications devrait être accessible directement (sauf s'il y a un pare-feu ou autre)
Quoi qu'il en soit, le serveur d'applications reçoit la requête puis renvoie une réponse à Apache
Apache renvoie ensuite la réponse au navigateur
Cependant, lors de ce processus, vous devrez peut-être également configurer la réécriture de l'url en html dans la réponse