[Gfoss] problemi con OpenLayers e proxy.cgi

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@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/
     &lt;Directory /var/www/html/cembra/cgi\-bin&gt;
             AllowOverride None
             Options \+ExecCGI \-MultiViews \+SymLinksIfOwnerMatch
             AddHandler cgi\-script \.cgi
             Require all granted
     &lt;/Directory&gt;

     ProxyPass /geoserver http://xxx.xxx.xxx.xxx:8080/geoserver
     ProxyPassReverse /geoserver http://xxx.xxx.xxx.xxx:8080/geoserver
     &lt;Location /geoserver&gt;
             Require all granted
     &lt;/Location&gt;
 \#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#

 ErrorLog $\{APACHE\_LOG\_DIR\}/error\.log
 CustomLog $\{APACHE\_LOG\_DIR\}/access\.log combined

</VirtualHost>