2016-10-22 1 views
1

Ich implementiere eine (ziemlich komplexe) RESTful-API.lighttpd fastcgi: Wie man abgestreifte URL-Pfadelemente wiederherstellt?

Ich benutze Lighttpd als Web-Server mit zwei FastCGI Backends:

  • ein PHP-Handler für den Großteil der Anfragen
  • ein spezialisierter C++ Handler für mehr andere Anfragen

meines aktuelle fastcgi.conf sieht wie (vereinfacht) aus:

server.modules += ("mod_fastcgi") 

fastcgi.server = (".php" => ("PHP" => (
       "bin-path" => "/usr/bin/php-cgi", 
       "socket" => "/tmp/php.socket", 
       "check-local" => "disable", 
       "bin-environment" => ("PHP_FCGI_CHILDREN" => "0", "PHP_FCGI_MAX_REQUESTS" => "500"), 
       "bin-copy-environment" => ("PATH", "SHELL", "USER"), 
       "max-procs" => 1, 
       "broken-scriptfilename" => "enable" 
      )), 
       "/api/groupA" => ("Server" => (
       "socket" => "/tmp/fcgi-C.socket", 
       "check-local" => "disable", 
      )), 
       "/api/groupB" => ("Server" => (
       "socket" => "/tmp/fcgi-C.socket", 
       "check-local" => "disable", 
      )), 
       "/api/groupC" => ("Server" => (
       "socket" => "/tmp/fcgi-C.socket", 
       "check-local" => "disable", 
      )), 
       "/api/" => ("PHP" => (
       "bin-path" => "/usr/bin/php-cgi", 
       "socket" => "/tmp/php-P.socket", 
       "check-local" => "disable", 
       "bin-environment" => ("PHP_FCGI_CHILDREN" => "0", "PHP_FCGI_MAX_REQUESTS" => "500"), 
       "bin-copy-environment" => ("PATH", "SHELL", "USER"), 
       "max-procs" => 1, 
       "broken-scriptfilename" => "enable" 
      )) 
      ) 

Das bedeutet, dass ich Präfixe für die C++ - Behandlung filtern und den Rest auf PHP setzen soll.

PHP-Teil funktioniert wie erwartet.

Problem hier ist C++ - Handler erhält einen abgeschnittenen Anfragepfad mit "/ Gruppe (A | B | C)" abgestreift (jeder erhält den Pfad ohne die führende "/ api", aber das ist OK).

Wie kann ich den vollständigen Pfad wiederherstellen?

Alternativ: Gibt es (oder kann ich produzieren) eine Variable/Header/was auch immer ich in C++ testen kann, um den "fehlenden Teil" zu bekommen?

Ich bin vollständig vorbereitet, um mit redundanten Informationen zu bewältigen (z. B .: Pfad vollständig wiederhergestellt "/ api/..."), aber ich brauche die Informationen, die gelöscht wurden.

Es fällt mir nur ein, die Sockets zu unterscheiden und einen Filter zu haben, der die Informationen basierend auf dem tatsächlich eingehenden Socket wiederherstellt, aber das scheint überkomplex und sehr spröde; Ich hoffe auf eine einfachere Lösung, möglicherweise mit URL-Rewrite (ich bin nicht vertraut mit Lighttpd Konfiguration Feinheiten, ich bin eher ein C++/PHP/Java-Coder, so dass ich hoffe, ich übersehen etwas offensichtlich;))

Antwort

Verwandte Themen