2015-08-17 1 views
0

J'essaie de développer un service RESTful en utilisant Apache 2 et mod_fastcgi comme couche de transport et de sécurité. Ce que j'essaye de réaliser est qu'une application de C++ est appelée quand une demande est faite. Ensuite, je veux utiliser la méthode HTTP et l'URI pour décider (à l'intérieur de l'application) laquelle des ressources (internes) doit être consulté et de quelle manière. L'appel de mon application C++ - FastCGI fonctionne (situé @/var/www/html/toto/fastcgi_test). Mais seulement avec un URI spécifique - l'URI où se trouve mon binaire:Apache 2, mod_fastcgi, REST: Gérer les requêtes à différents URI avec la même application

Si j'ouvre http://127.0.0.1/foo/fastcgi_test dans un navigateur mon application s'exécute et renvoie une page de test html comme je le souhaite. Essayer par exemple. http://127.0.0.1/foo/bar renvoie une page avec un 404. Mais j'aimerais que la même application soit appelée (fastcgi_test).

Ma configuration (jusqu'à présent) ressemble à ceci:

<IfModule mod_fastcgi.c> 
    FastCgiIpcDir /var/lib/apache2/fastcgi  
    <Location /foo> 
    SetHandler fastcgi-script 
    </Location>  
    FastCgiServer /var/www/html/foo/fastcgi_test -flush  
</IfModule> 

Je lis la et fouilla dans les manuels d'Apache, mais je ne peux pas trouver l'astuce droite. Il semble que je ne cherche pas le bon mot clé. Comme je suis très nouveau dans la configuration d'Apache, j'espère peut-être manquer le bon point de départ. Comment configurer Apache/mod_fastcgi pour envoyer des requêtes à une "branche d'URI" vers le même processus FastCGI? Quelqu'un peut-il fournir un pointeur?

Répondre

0

La clé est d'utiliser un alias. J'ai également déplacé le programme FastCGI hors de la zone de contenu d'Apache dans un répertoire séparé (/ var/www/fastcgi).

Ma solution ressemble à ceci:

<IfModule mod_fastcgi.c> 
    FastCgiIpcDir /var/lib/apache2/fastcgi 
    <Directory /var/www/fastcgi> 
    SetHandler fastcgi-script 
    </Directory> 
    <Location "/foo"> 
    Require all granted 
    </Location> 
    FastCgiServer /var/www/fastcgi/fastcgi_test -flush 
    AliasMatch "/foo(.*)" "/var/www/fastcgi/fastcgi_test" 
</IfModule>