Suite

QGIS Server ne fonctionne pas (problème avec CGI rapide)

QGIS Server ne fonctionne pas (problème avec CGI rapide)


Existe-t-il un exemple/tutoriel simple expliquant comment configurer QGIS Server avec la dernière version de QGIS sur Ubuntu, je n'arrive pas à obtenir un résultat correct (image vierge) ? Je pense qu'il pourrait y avoir un problème avec ma configuration FASTCGI sur Apache.

Aidez-moi, s'il vous plaît. Merci.


Je le fais fonctionner sur Ubuntu 10.04/10.10 et 11.04. Mon premier tuto était le suivant

http://linfiniti.com/2010/08/qgis-mapserver-a-wms-server-for-the-masses/ (lien brisé)

mais sous Ubuntu (avec tout installé à partir des dépôts), c'est encore plus facile.

Entrez dans le dossier cgi-bin, créez un dossier de projet, copiez-y le fichier de projet et une copie de qgis_mapserv.fcgi, puis ajoutez un fichier de métadonnées.

Le projet qgis DOIT être enregistré avec des chemins absolus (pour les couches).


La documentation principale de QGIS Server se trouve à l'adresse : http://www.qgis.org/wiki/QGIS_Server_Tutorial

Citant la section Wiki pour Ubuntu :

Pour configurer QGIS Server avec Apache 2 mod_fastcgi, les packages suivants sont requis : apt-get install qgis-mapserver libapache2-mod-fcgid

Notez que libapache2-mod-fcgid et libapache2-mod-fastcgi sont des packages différents et nécessitent des configurations différentes.

En utilisant la configuration par défaut, QGIS Server doit répondre à une requête GetCapabilities à partir d'ici :

http://localhost/cgi-bin/qgis_mapserv.fcgi?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetCapabilities


J'ai installé qgis et qgis_server en utilisant ce tutoriel : http://underdark.wordpress.com/2012/03/30/qgis-server-on-ubuntu-step-by-step/

Caractéristiques:

  • Ubuntu 12.04.O
  • Machine virtuelle

    1. Dans "/usr/lib/cgi-bin/", créez un dossier appelé "test". "test" est l'endroit où vous enregistrerez votre projet qgis et .shp également. Dans ce dossier, vous devez également copier le fichier qgis_mapserv.fcgi et wms_metadata.xml.
    2. Ouvrez un fichier .shp dans qgis et enregistrez-le en tant que projet dans "/usr/lib/cgi-bin/test/". Supposons que le nom de votre projet soit "demo.qgis"
    3. Maintenant, dans les propriétés du projet, définissez votre src en tant que Google Mercator et dans les propriétés du calque, définissez le nom de votre calque et enregistrez-le.
    4. Après cela, fermez votre projet et créez-en un nouveau.
    5. Dans le nouveau projet vierge, ajoutez une couche WMS et ajoutez le nom et l'url de votre nom de projet.

Exemple (étape 5) :

Nom : Rivers url://http://localhost/cgi-bins/test/qgis_mapserv.fcgi

puis acceptez et le tour est joué...


Impossible d'exécuter le script Perl FastCGI sur le serveur Apache : erreur 500

J'essaie d'exécuter un serveur Apache qui exécute certains scripts sur un CGI rapide, mais je n'arrive pas à comprendre comment le faire fonctionner. Mon problème en particulier est l'"Erreur 500 : Fin de la sortie du script avant les en-têtes".

J'ai beaucoup lu à ce sujet, en suivant toutes les suggestions que je peux trouver, mais toujours pas de chance. Il y en avait sur IOTimeout et BusyTimeout et tous les autres types de délai d'attente Fcgid disponibles, mais ceux-ci n'ont rien fait et je ne pense pas que mon problème y soit lié.

À partir d'une nouvelle installation Linux, voici ce que j'ai fait :

Création d'un nouveau site Web vide à /var/www/test avec des fichiers vides et un script. J'ai défini les autorisations en conséquence et juste pour être sûr, j'ai changé le propriétaire et le groupe en http.

J'ai ajouté ceci à /etc/httpd/conf/httpd.conf :

Maintenant, je peux parfaitement exécuter le script depuis le terminal. Lorsque je me dirige ensuite vers http://localhost, j'obtiens une liste des fichiers de répertoire comme prévu, mais lorsque j'ouvre le script, j'obtiens l'erreur 500 mentionnée ci-dessus. Le journal des erreurs d'Apache indique ceci (parties inutiles coupées) :

Pourquoi la sortie du script a-t-elle été enregistrée dans le journal des erreurs ? Je pense que cela est lié aux autorisations et à la propriété, mais je ne peux pas comprendre comment, je pense que je les ai tous définis en conséquence. Avez-vous une idée de ce que je peux faire pour que cela fonctionne?


Vous pouvez configurer vos propres flux et format de journaux dans Apache à l'aide des directives TransferLog et LogFormat :

J'ai eu le même problème et je n'ai pas vraiment trouvé la route de configuration du journal Apache aussi pratique.

Si votre projet Catalyst enregistre de nombreux messages, la journalisation via une erreur standard dans le journal d'erreurs d'Apache n'est pas très propre : les messages de journalisation sont mélangés avec le bruit d'autres applications Web et surtout si vous utilisez mod_fastcgi, chaque ligne sera précédée d'un long préfixe.

Une alternative consiste à se connecter à un fichier. Mais alors vous devez vous assurer que plusieurs processus ne corrompent pas le fichier journal. Le module Log::Handler de Jonny Schulz fait exactement cela, car il prend en charge le flocage par message.

Ce module est un wrapper pour ledit Log::Handler.


Impossible de servir l'application Python Flask à partir de l'application Web IIS

J'essaie de servir l'application Flask à partir de l'application Web IIS sous le site Web par défaut, mais je ne parviens pas à la faire fonctionner. Voici les détails:

  1. Installer IIS avec tous les composants (avec CGI)
  2. Installer Python 2.7.14
  3. Ajouter Python dans la variable PATH
  4. pip installer wfastcgi
  5. wfastcgi-activer
  6. flacon d'installation de pip
  7. iisreset
  8. Créer un répertoire : C:inetpubwwwrootflask-demo
  9. Cliquez sur Convertir en application dans IIS pour le répertoire ci-dessus.
  10. Créez C:inetpubwwwrootflask-demomyapp.py avec le contenu suivant :

Lorsque j'essaie d'accéder à la page en tant que http://localhost/flask-demo , j'obtiens 404. Mais si je change la 2ème ligne dans myapp.py de @app.route('/') à @app.route('/flask -demo') où flask-demo est le nom de l'application Web IIS où les fichiers Python sont placés, cela fonctionne.

Je souhaite servir la page Web Python sans écrire flask-demo / nom de l'application Web IIS où l'application Python flask est placée. Je ne suis pas capable de faire ça.


3 réponses 3

Sous Ubuntu, une autre façon d'emprisonner est l'apparmor !

Il s'agit d'un module de sécurité Linux (LSM) de contrôle d'accès obligatoire (MAC) basé sur un chemin. Dans Ubuntu 10.04, il est activé par défaut pour les services sélectionnés.

La documentation est assez fragmentée. La documentation Ubuntu pourrait être . mieux. Même la documentation en amont ne donne pas une bonne introduction. La page de référence indique :

AVERTISSEMENT : ce document est à un stade très précoce de création, il n'est pas encore sous aucune forme pour être utilisé comme manuel de référence

Cependant, le démarrage est relativement facile. Un profil AppAmor correspond à un chemin exécutable, par ex. /var/www/esclave/esclave . La règle par défaut d'un profil est de refuser (ce qui est génial), si rien d'autre ne correspond. Les règles de refus du profil correspondent toujours avant les règles d'autorisation. Un profil vide nie tout.

Les profils des différents binaires sont stockés sous /etc/apparmor.d . apparmor_status affiche quels profils sont actifs, quels sont en mode d'application (bon) ou uniquement en mode réclamation (seuls les messages de journal sont imprimés).

Créer un nouveau profil pour /var/www/slave/slave est juste :

Démarrez dans un autre terminal /var/www/slave/slave et faites un cas d'utilisation typique. Une fois terminé, appuyez sur s et f dans le terminal précédent.

Maintenant /etc/apparmor.d contient un fichier de profil var.www.slave.slave . Si l'esclave fait du fork, le profil n'est que très clairsemé - tous les accès des enfants sont ignorés.

Quoi qu'il en soit, le profil est maintenant actif en mode d'application et vous pouvez simplement déclencher des actions de manière itérative dans l'esclave et surveiller les violations de tail -f /var/log/messages. Dans un autre terminal, vous modifiez le fichier de profil et exécutez aa-enforce var.www.slave.slave après chaque modification. Le journal affiche alors :

permettrait l'accès à l'avenir.

Tout cela est assez simple.

AppAmor prend en charge les règles de réseau à gros grains, par ex.

Sans cette règle, aucun accès Internet n'est possible (y compris localhost), c'est-à-dire qu'avec cette règle, vous pouvez utiliser iptables pour des règles plus fines (par exemple, basées sur l'uid de l'esclave).

Un autre fragment de documentation contient quelque chose sur les sous-profils pour les scripts php.

Le squelette du profil var.www.slave.slave ressemble à :

Avec un tel profil, l'esclave n'est plus capable d'appeler des utilitaires comme mail ou sendmail.


Performances du serveur lentes - mod_fcgid provoquant des erreurs (104), (09) et (32) : mod_fcgid : ap_pass_brigade a échoué dans la fonction handle_request_ipc

J'ai du mal à suivre la source de la lenteur des performances du serveur Web pour le site wordpress et les pages non mises en cache.

Système d'exploitation du serveur: Debian 8 "Jesssie)" - Linux version 4.9.58-xxxx-std-ipv6-64 ([email protected]) (gcc version 6.3.0 20170516 (Debian 6.3.0-18) ) #1 SMP Mon 23 octobre 11:35:59 CEST 2017 (Ispconfig)

serveur Web: Version du serveur : Apache/2.4.10 (Debian)

PHP (par défaut) : PHP 7.0.26

PHP (sélectionné) : PHP version 7.1.8

Processeur: Intel 2x Xeon E5-2630v3 - 16/32t - 2,4 GHz /3,2 GHz

RAM: 128 Go DDR4 ECC 1866 MHz

Disques: SoftRaid 2x450 Go SSD NVMe

apache2.conf:

État du serveur (pour les 40 dernières minutes) :

apache2ctl -M:

Serveur MPM : travailleur:

mon.cnf (MySQL) :

domaine.com.vhost-le-ssl.conf (. )

j'héberge un seul site wordpress sur cette machine. (32) une erreur apparaissait de temps en temps même lorsque le site Web était en développement et que le seul utilisateur était moi. Actuellement, j'ai environ 5 000 visiteurs uniques par jour (https://domain.com) et mon error.log affiche plusieurs erreurs (104), (9) et (32), y compris :

Je dirais que cette erreur se produit pour 5% à 10% de toutes les visites et que le nombre est actuellement faible uniquement en raison du fait que la majorité de mes pages sont mises en cache. Cela commence à m'inquiéter car mon site Web reçoit de plus en plus de visites de jour en jour et de plus en plus de visiteurs s'inscrivent et utilisent l'option "recherche" ou cliquent simplement sur des liens "tag" qui ne sont pas mis en cache en raison de son contenu dynamique.

D'après ce que j'ai remarqué, ces erreurs se produisent principalement lorsque PHP est en cours d'exécution. Pour le test, j'ai ouvert environ 20 messages dans des onglets et cliqué sur le bouton "Modifier". Cela a provoqué des erreurs (104), (9) et (32). (32) apparaît également lorsque le visiteur effectue une recherche. Au total, j'ai environ 500k post dans mon wordpress.

Ce que j'ai fait pour essayer de le réparer (SANS SUCCÈS): 1. je suis passé de PHP-FPM à Fast-CGI et ouvert 20 messages dans des onglets et cliqué sur le bouton "Modifier". Les erreurs s'affichent toujours dans error.log et et la publication ne se charge pas avec le navigateur affichant "En attente de socket disponible" (les pages mises en cache fonctionnent très rapidement).

ps aux | grep "php"

Ces requêtes MySQL génèrent 128,9% d'utilisation du processeur par mysqld :

2. J'ai mis à jour et modifié les options suivantes :

La documentation Apache mod_fcgid répertorie une autre possibilité que le "mod_fcgid: ap_pass_brigade a échoué dans la fonction handle_request_ipc" erreur peut se produire, qui est due à la limite de PHP_FCGI_MAX_REQUESTS et/ou FcgidMaxRequestsPerProcess. Les processus PHP FastCGI se terminent après avoir traité 500 requêtes, et ils peuvent se fermer après que ce module se soit déjà connecté à l'application et ait envoyé la requête suivante, ce qui entraîne l'erreur "mod_fcgid: ap_pass_brigade a échoué dans la fonction handle_request_ipc".

Conformément à la documentation Apache mod_fcgid et à cette question, j'ai également mis à jour les options suivantes :

Malheureusement, les deux 1) et 2) n'a pas résolu mon problème :-/ Des conseils sur la façon de squiz max de cette machine (Intel 2x Xeon E5-2630v3 - 16/32t - 2,4 GHz/3,2 GHz + 128 Go DDR4 ECC 1866 MHz RAM) et résoudre le problème avec mod_fcgid des erreurs ? Acclamations!


Apache mod deflate ne compresse pas la sortie php

J'ai le mod_deflate opérationnel. Je peux ajouter un fichier quelque chose.txt sur mon serveur Apache et utiliser curl pour le vérifier.

curl --compressed -I /somefile.txt me renvoie ce qui est bon et compressé :

Mais si j'utilise /some.php je reçois :

Mais pas de Content-Encoding : gzip, le .htaccess que j'ai utilisé avec plusieurs options :

J'ai également vérifié si la compression zlib était désactivée dans le php.ini et j'ai également essayé de désactiver le tampon de sortie. Mais peu importe ce que j'essaie, je n'obtiens jamais la sortie php à compresser par apache. Les frais généraux d'Apache à zip sont inférieurs à ceux que j'utilise lorsque j'utilise php zlib.

Je vois suffisamment de messages comme la compression de sortie Apache fonctionnant pour CSS/JS mais pas PHP mais qui permet la compression à partir de php. Je veux qu'Apache s'en occupe.

Je dois manquer quelque chose de stupide ici.

METTRE À JOUR: J'ai résolu tous les problèmes, également grâce aux réponses données. Au final, ça n'a toujours pas fonctionné à 100%. Cela était dû au mauvais package installé. apache2filter a été utilisé, ce qui m'a envoyé sur le mauvais chemin.


2 réponses 2

Le modèle de programmation Web dans les années 90 consistait à lancer une application qui utilisait l'interface de passerelle commune pour lancer un autre processus qui était forké par le serveur Web.

La bifurcation d'un processus est une opération assez lourde. Pour perl, cela signifie lancer l'interpréteur, l'exécuter, puis laisser le processus se terminer. Lorsque l'on travaille avec de lourdes charges, cela devenait prohibitif (mémoire et processeur).

FastCGI a réduit les frais généraux des CGI en réutilisant le processus, réduisant ainsi le fork lourd d'un processus. Ceci est plus en ligne avec les serveurs d'applications, ce qui nous amène à.

L'approche de développement aujourd'hui est d'avoir un serveur d'applications dans un langage qui a un modèle de threading de processus léger, qui peut gérer des charges très importantes (par rapport à l'époque de CGI). Parmi ceux-ci, vous avez Java, Go et C# qui suivent cette approche.

Cela ne signifie pas que perl est sorti. Il existe des serveurs d'applications pour Perl. On entend rarement parler de Catalyst par rapport à des choses telles que Zope, NodeJS ou la pléthore de serveurs d'applications Java.

Une partie de cela est le timing. Pendant le développement des serveurs d'applications Java, Perl s'est un peu enlisé avec le travail sur perl 6 (tout journée année maintenant) et donc la communauté dans son ensemble a laissé filer cette voie de développement.

je personnellement écartez la discipline des langues comme une raison pour laquelle Perl a oublié de citer Javascript, php et ruby ​​comme trois exemples de langues tout aussi indisciplinées qui restent populaires dans le domaine du Web.

Des langages tels que Java et C# (et dans une certaine mesure, python) avec le soutien de grandes entreprises (Sun/Oracle, Microsoft, Google) et, oui, une plus grande discipline dans le langage sont plus attrayants pour le développement d'entreprise.


Cependant, j'ai maintenant atteint un point où je me demande s'il a besoin d'une réécriture car je ne vois pas de bonnes solutions aux problèmes suivants avec le modèle MVC :

Je souhaite pouvoir poster des données et contrôler ce qui se passe en cas d'échec côté client. Avec un POST normal, une fois que l'on a soumis le formulaire, on passe au contrôle. Cela signifie que si le serveur redémarre ou reçoit une mise à jour et que le proxy inverse n'est pas encore opérationnel, Nginx affiche une erreur et se gare sur l'erreur. J'aimerais pouvoir effectuer des mises à jour (enlever le Fast CGI (Django) pendant 5 secondes) et que le site Web le gère sans problème. Actuellement, si un GET est effectué alors que le proxy est en panne, je sers une page de maintenance qui essaie de s'actualiser toutes les 5 secondes, donc les GET fonctionnent correctement, mais les POST sont un problème. SPA utilise AJAX, donc on est toujours en contrôle après la soumission des données.

Si la connexion Internet est en panne, je voudrais mettre en cache le POST, comme un PWA?, puis, une fois en ligne, envoyer tous les POST. Les PWA résolvent ce problème grâce à leur capacité de mise en cache hors ligne.

Lorsque Internet tombe en panne, l'usine dispose d'une connexion Internet 3G de secours, mais son adresse IP change, d'où l'échec de l'authentification basée sur IP. Il y a des stations d'entrée publiques dans l'usine, elles n'utilisent donc pas d'authentification basée sur l'utilisateur, je dois donc trouver une nouvelle méthode d'authentification. SPA utilise une méthode de jeton qui, je pense, résout ce problème.


Interface Web simple pour exécuter le programme C++

C'est en fait une question très simple, mais je suis perdu pour le moment.

C'est en fait avec un beaglebone noir. Mais je suppose que le problème pourrait également se traduire par RPi.

J'utilisais un beaglebone noir pour un projet scolaire. Il contrôle un tas de moteurs et d'actionneurs, etc. Nous avons tout écrit en C++ et créé des bibliothèques de fonctions. Lorsqu'un programme principal les appelle, les fonctions s'exécutent très bien.

Récemment, on nous a demandé de faire une démonstration de nos progrès jusqu'à présent. Le programme principal est loin d'être terminé, nous pensions donc à une sorte d'interface Web pouvant exécuter le programme C++ conforme sur commande. Nous espérions obtenir le serveur hébergé sur la carte et y accéder via le réseau local à partir d'autres PC. Mais je n'ai jamais fait ça auparavant et je ne sais pas par où commencer. Est-ce que node.js (avec le 'bonescript') va être d'une quelconque aide ? Ou existe-t-il un moyen plus simple avec le HTML de base ?

Je n'ai que quelques jours pour le découvrir, donc je ne voulais pas perdre de temps à chercher les mauvaises méthodes.


Voir la vidéo: GETTING STARTED WITH POSTGIS, GEOSERVER AND OPENLAYERS