[Gfoss] problemi con OpenLayers e proxy.cgi

gmail beppe beppenapo a gmail.com
Lun 3 Maggio 2021 11:21:28 CEST


Buongiorno a tutti, vado dritto al problema!

Su un server Hertzner, su cui gira Debian, ho sviluppato diverse webapp, 
quelle che mi stanno dando problemi risalgono a diversi anni fa, tutte 
scritte in php, la libreria usata è OpenLayers 2.

Negli anni, pacchetti e distro, sono stati sempre aggiornati e tutto ha 
funzionato alla perfezione...motivo per cui non è mai stato fatto un 
refactoring del codice (in realtà, il vero motivo, è che non c'erano 
fondi per "svecchiare" le app!!!).

La struttura generale è la seguente:

  * distro: Debian stable
  * apache v. 2.4
  * tomcat v. 9
  * geoserver v. 2.13
  * openlayers 2
  * postgresql 13
  * postgis 3.1

Stendiamo un velo pietoso sull'utilizzo di openlayers 2, cause di forza 
maggiore!

Tutte le geometrie sono gestite da postgis e servite da geoserver via 
tomcat. Per la visualizzazione delle mappe le applicazioni utilizzano 
sia il protocollo wms che wfs (per inserimento/modifica/eliminazione 
delle geometrie).

Da qualche settimana ho notato un problema con le richieste wfs, 
problema rilevato anche da firebug che mi dà il classico "internal 
server error", mentre il log di apache dice che:
[cgi:error] [pid 7596] [client ::1:52300] AH01215: (8)Exec format error: 
exec of '/usr/lib/cgi-bin/proxy.cgi' failed: /usr/lib/cgi-bin/proxy.cgi
[cgi:error] [pid 7596] [client ::1:52300] End of script output before 
headers: proxy.cgi

In realtà, oltre a non visualizzare le geometrie vettoriali (di seguito 
un esempio)
ubi_mater = new OpenLayers.Layer.Vector("ubi_mater", {
     strategies: [new OpenLayers.Strategy.BBOX()],
     protocol: new OpenLayers.Protocol.WFS({
       version:     wfsConf.version,
       url:         wfsConf.url,
       featureNS:   wfsConf.featureNS,
       srsName:     wfsConf.srsName,
       geometryName:wfsConf.geometryName,
       featureType: "ubi_mater",
       schema:      wfsConf.schema+"ubi_mater"
     })
   });
   map.addLayer(ubi_mater);

le applicazioni mi danno problemi anche con la funzione 
"OpenLayers.Control.WMSGetFeatureInfo", con la quale mi tiro fuori l'id 
della geometria che utilizzo per interrogare postgresql e mostrare tutta 
una serie di info legate alla geometria interrogata, ma al click sulla 
geometria invece dei dati ho un array vuota:

info = new OpenLayers.Control.WMSGetFeatureInfo({
     url: 'http://xxxx.xxx.xxx.xxx:8080/geoserver/wms',
     title: 'Informazioni sui livelli interrogati',
     queryVisible: true,
     layers: listalayer,
     infoFormat: 'application/vnd.ogc.gml',
     vendorParams: {buffer: 10},
     eventListeners: {
       getfeatureinfo: function(event) {
         var arr = new Array();
         var arrActive = new Array();
         var arrArea = new Array();
         for (var i = 0; i < event.features.length; i++) {
           var feature = event.features[i];
           var attributes = feature.attributes;
           var id_ai = attributes.id_geom;
           var id_area = attributes.id_area;
           arr.push("area_int_poly.id = "+id_ai);
           arrArea.push('id_area = '+id_area);
         }
         $(".ai:checked").map(function(){arrActive.push('dgn_tpsch = 
'+$(this).attr('data-tipo'));});
         $.ajax({
           url: 'inc/popupAi.php',
           type: 'POST',
           data: {arr:arr,arrActive:arrActive,arrArea:arrArea},
           success: function(data){
             console.log(data)
             $("#result").animate({left:"0px"}).addClass('opened');
             $("#resultContent").html(data);
           }
         });
       }
     }
   });
   map.addControl(info);
   info.activate();

Ovviamente apache ha tutti i moduli correttamente abilitati, il file 
proxy ha i permessi settati su 755, e i vari virtual host hanno tutte le 
direttive relative all'esecuzione degli script cgi...e ovviamente il 
codice non è stato recentemente modificato.

Vi riporto un esempio[0] di virtual host. Ho provato a fare diverse 
operazioni, compresa quella di reinstallare e riconfigurare 
completamente apache (magari c'era qualche configurazione strana!), ho 
anche provato a replicare tutto sul mio pc, ho provato a modificare i 
virtual host cambiando il percorso del proxy e inserendo quello di 
default (/usr/lib/cgi-bin/proxy.cgi), ho cambiato l'intestazione del 
file proxy indicando python3 come eseguibile da utilizzare, ma il 
problema persiste.

Per completezza di informazioni vi dico che:

  * se provo ad aprire il link localhost/cgi-bin/proxy.cgi mi dà
    "internal server error"
  * se provo ad aprire il proxy.cgi presente nella cartella
    dell'applicazione specifica mi fa vedere il codice del file, come se
    non fosse presente il modulo cgi di apache (che ovviamente è abilitato)

Consigli? A parte di riscrivere il codice con librerie non obsolete!!!!

Grazie a tutti

-beppe-

[0] <VirtualHost localhost/cembra:80>
     ServerName localhost/cembra
     ServerAdmin beppenapo a gmailcom
     DocumentRoot /var/www/html/cembra
     ############## mia configurazione #############
     <Directory />
                 Options FollowSymLinks
                 AllowOverride None
         </Directory>
         <Directory /var/www/html/cembra>
                 Options +Indexes +FollowSymLinks +MultiViews +ExecCGI
                 AllowOverride None
                 AddHandler cgi-script .cgi
                 Require all granted
         </Directory>

         ScriptAlias /cgi-bin/ /var/www/html/cembra/cgi-bin/
         <Directory /var/www/html/cembra/cgi-bin>
                 AllowOverride None
                 Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                 AddHandler cgi-script .cgi
                 Require all granted
         </Directory>

         ProxyPass /geoserver http://xxx.xxx.xxx.xxx:8080/geoserver
         ProxyPassReverse /geoserver http://xxx.xxx.xxx.xxx:8080/geoserver
         <Location /geoserver>
                 Require all granted
         </Location>
     ###############################################

     ErrorLog ${APACHE_LOG_DIR}/error.log
     CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>





Maggiori informazioni sulla lista Gfoss