Exécution de scripts CGI avec Apache + SSL

J’ai des problèmes à essayer d’exécuter un script CGI via apache. Ce script est identique au proxy.cgi d’OpenLayers qui permet de faire des requêtes AJAX en dehors de son domaine. Ce script fonctionne sans erreur et sans erreur en utilisant la configuration apache normale (sans SSL), mais! quand j’active SSL, il commence à se comporter de manière erratique.

Laissez-moi d’abord vous montrer ma configuration apache pour SSL:

NameVirtualHost *:443  ServerName 172.22.1.37 SSLEngine on SSLProtocol all -SSLv2 SSLCertificateFile /etc/apache2/ca/apache-server.crt SSLCertificateKeyFile /etc/apache2/ca/apache-server.key SSLCertificateChainFile /etc/apache2/ca/proba.crt SSLCACertificateFile /etc/apache2/ca/proba.crt AddType application/x-x509-ca-cert .crt AddType application/x-pkcs7-crl .crl Alias /mapviewer "/var/www/mapviewer/" ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ AddHandler cgi-script .cgi DocumentRoot /usr/lib/cgi-bin/  AllowOverride All Options +ExecCGI -Multiviews +SymLinksIfOwnerMatch Order allow,deny Allow from all   

Ainsi, SSL se charge correctement, puisque j’ai essayé d’autres applications Web et qu’elles fonctionnent correctement sur https, le problème est que cette application utilise le proxy.cgi.

Chose étrange, lorsque je lance apache, au début, il fonctionnera correctement sans aucun problème, mais après un certain temps (je ne suis pas sûr que cela dépende du temps ou du nombre de requêtes, même si après les tests, ) lorsque le code javascript appelle ce script proxy.cgi, la requête sera simplement suspendue et, à la fin, sera annulée en raison de “timeout”.

Dois-je activer une autre option pour exécuter des scripts cgi via https? Y a-t-il quelque chose qui me manque? Je peux mettre le code proxy.cgi, mais je ne pense pas qu’il ait quelque chose à faire car il a fait ses preuves, le problème est que, avec SSL activé, il ne sera pas exécuté.

Merci d’avoir lu!

Tout d’abord, grâce à Joseph Myers pour ses suggestions, même si elles n’ont pas fourni de solution, elles m’ont aidé. Ce qu’il a dit à propos des processus de zombies avait du sens et après un examen plus approfondi, je me suis rendu compte qu’au lieu de charger mod_cgid au démarrage d’Apache, il chargeait plutôt mod_cgi. La différence est assez perceptible, sachant (après avoir consulté la documentation httpd) que mod_cgid

crée un démon externe chargé de forcer les processus enfants à exécuter des scripts CGI

et il semble également que ce soit la valeur par défaut, au lieu de cgi. Je ne me souviens pas avoir changé cela, mais diable, qui sait, ça marche maintenant!

tl; dr, n’utilisez pas mod_cgi! utilisez plutôt mod_cgid!

J’ai parfois eu des problèmes de ce type, et presque tous ont été résolus en forçant une “connexion: close” dans chaque réponse HTTPS. Il devrait être imprimé dans l’en-tête HTTP. Assurez-vous également que le script proxy.cgi se ferme / existe après chaque exécution pour vous assurer que le processus SSL d’Apache n’est pas rempli avec les processus zombies qui ne se ferment jamais.