Comment configurer Apache 2 pour exécuter des scripts Perl CGI?

Je voudrais configurer Apache 2 sur Kubuntu pour exécuter des scripts Perl CGI. J'ai essayé quelques étapes que j'ai trouvé sur google, mais rien ne semble fonctionner.

Quelle est la bonne façon d'atteindre cet objectif?

38
demandé sur Peter Mortensen 2009-02-18 14:50:31

8 réponses

ce post est destiné à sauver les personnes qui souffrent de *ne pas être en mesure de correctement configurer Apache2 pour Perl sur Ubuntu. (Les configurations système spécifiques à votre machine Linux seront mentionnées entre crochets, comme [ceci]).

résultat Possible D'une configuration incorrecte Apache 2:

  1. navigateur essayant de télécharger le .pl file au lieu d'exécuter et de donner le résultat.
  2. Interdit.
  3. Interne erreur de serveur.

si l'on suit les étapes décrites ci-dessous avec une intelligence raisonnable, il/elle peut surmonter les erreurs mentionnées ci-dessus.

Avant de commencer les mesures. Accédez à /etc/hosts le fichier et ajouter une adresse IP / nom de domaine, par exemple:

127.0.0.1 www.BECK.com

Etape 1: Install apache2 Étape 2: Installer mod_perl Etape 3: Configurer apache2

ouvrir sites-available/default et ajouter ce qui suit,

<Files ~ "\.(pl|cgi)$">
    SetHandler perl-script
    PerlResponseHandler ModPerl::PerlRun
    Options +ExecCGI
    PerlSendHeader On
</Files>

<Directory />
    Options FollowSymLinks
    AllowOverride None
</Directory>
<Directory [path-to-store-your-website-files-like-.html-(perl-scripts-should-be-stored-in-cgi-bin] >
####(The Perl/CGI scripts can be stored out of the cgi-bin directory, but that's a story for another day. Let's concentrate on washing out the issue at hand)
####
    Options Indexes FollowSymLinks MultiViews
    AllowOverride None
    Order allow,deny
    allow from all
</Directory>

ScriptAlias /cgi-bin/ [path-where-you-want-your-.pl-and-.cgi-files]

<Directory [path-where-you-want-your-.pl-and-.cgi-files]>
    AllowOverride None
    Options ExecCGI -MultiViews +SymLinksIfOwnerMatch
    AddHandler cgi-script .pl
    Order allow,deny
    allow from all
</Directory>
<Files ~ "\.(pl|cgi)$">
    SetHandler perl-script
    PerlResponseHandler ModPerl::PerlRun
    Options +ExecCGI
    PerlSendHeader On
</Files>

<Directory />
    Options FollowSymLinks
    AllowOverride None
</Directory>
<Directory [path-to-store-your-website-files-like-.html-(perl-scripts-should-be-stored-in-cgi-bin] >
####(The Perl/CGI scripts can be stored out of the cgi-bin directory, but that's a story for another day. Let's concentrate on washing out the issue at hand)
####
    Options Indexes FollowSymLinks MultiViews
    AllowOverride None
    Order allow,deny
    allow from all
</Directory>

ScriptAlias /cgi-bin/ [path-where-you-want-your-.pl-and-.cgi-files]

<Directory [path-where-you-want-your-.pl-and-.cgi-files]>
    AllowOverride None
    Options ExecCGI -MultiViews +SymLinksIfOwnerMatch
    AddHandler cgi-script .pl
    Order allow,deny
    allow from all
</Directory>

Étape 4:

Ajoutez les lignes suivantes à votre /etc/apache2/apache2.conf fichier.

AddHandler cgi-script .cgi .pl
<Files ~ "\.pl$">
Options +ExecCGI
</Files>
<Files ~ "\.cgi$">
Options +ExecCGI
</Files>

<IfModule mod_perl.c>
<IfModule mod_alias.c>
Alias /perl/ /home/sly/host/perl/
</IfModule>
<Location /perl>
SetHandler perl-script
PerlHandler Apache::Registry
Options +ExecCGI
</Location>
</IfModule>

<Files ~ "\.pl$">
Options +ExecCGI
</Files>

Étape 5:

très important, ou du moins je suppose que oui, seulement après avoir fait cette étape, j'ai réussi à la faire fonctionner.

AddHandler cgi-script .cgi .pl

<Files ~ "\.pl$">
Options +ExecCGI
</Files>
<Files ~ "\.cgi$">
Options +ExecCGI
</Files>

<IfModule mod_perl.c>
<IfModule mod_alias.c>
Alias /perl/ /home/sly/host/perl/
</IfModule>
<Location /perl>
SetHandler perl-script
PerlHandler Apache::Registry
Options +ExecCGI
</Location>
</IfModule>

<Files ~ "\.pl$">
Options +ExecCGI
</Files>

Etape 6

très important, ou du moins je suppose que oui, seulement après avoir fait cette étape, j'ai réussi à la faire fonctionner.

Ajouter les éléments suivants à vous /etc/apache2/sites-enabled/000-default le fichier

<Files ~ "\.(pl|cgi)$">
SetHandler perl-script
PerlResponseHandler ModPerl::PerlRun
Options +ExecCGI
PerlSendHeader On
</Files>

Étape 7:

Maintenant ajouter, votre script Perl comme test.pl dans l'endroit où vous l'avez mentionné avant à l'étape 3 comme [chemin-où-vous-voulez-votre-.pl-et-.cgi-fichiers].

donne des permissions à la .pl le fichier à l'aide de chmod et ensuite, tapez le webaddress/cgi-bin/test.pl dans la barre d'adresse du navigateur, là vous allez, vous l'avez.

(maintenant, beaucoup de choses auraient été redondantes dans ce post. De bien vouloir l'ignorer.)

22
répondu beck03076 2016-12-31 21:23:42

vous aurez besoin de jeter un oeil à votre journal D'erreurs Apache pour voir ce qu'est "l'erreur interne du serveur". Les quatre cas les plus probables, d'après mon expérience, seraient:

  1. le programme CGI se trouve dans un répertoire qui ne permet pas L'exécution de CGI. Solution: ajouter le ExecCGI option de ce répertoire via httpd.conf ou un .fichier htaccess.

  2. Apache n'est configuré que pour exécuter CGIs à partir d'un cgi-bin répertoire. Solution: déplacer le CGI programme ou ajouter un AddHandler cgi-script .cgi déclaration à httpd.conf.

  3. le programme CGI n'est pas défini comme exécutable. Solution (en supposant un *nix-type de système d'exploitation): chmod +x my_prog.cgi

  4. le programme CGI quitte sans envoyer d'en-têtes. Solution: lancez le programme depuis la ligne de commande et vérifiez que a) il tourne réellement plutôt que de mourir avec une erreur de compilation et b) il génère la sortie correcte, qui devrait inclure, au minimum, un Content-Type en-tête et une ligne vide suivant le dernier de ses en-têtes.

19
répondu Dave Sherohman 2016-12-31 21:19:06

(Google search m'a amené à cette question même si je n'ai pas demandé perl)

j'ai eu un problème avec l'exécution des scripts (bien que bash pas perl). Apache avait une configuration deScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ cependant le journal des erreurs Apache montre File does not exist: /var/www/cgi-bin/test.html.

Essayé de mettre le script dans les deux /usr/lib/cgi-bin/ et /var/www/cgi-bin/ mais ni l'un ni l'autre ne fonctionnaient.

après une session de recherche sur Google prolongée, ce qui l'a résolu pour moi était sudo a2enmod cgi et tout est tombé en place à l'aide de /usr/lib/cgi-bin/.

12
répondu northern-bradley 2015-03-02 11:37:38

Ubuntu 12.04 (Precise Pangolin) (et peut-être une version ou deux avant), il suffit d'installer apache2 et mod-perl via Synaptic et placer vos scripts CGI dans /usr/lib/cgi-bin est vraiment tout ce que vous avez à faire.

5
répondu Biff 2016-12-31 21:26:19

il y a deux façons de gérer les scripts CGI, SetHandler et AddHandler.

SetHandler cgi-script

s'applique à tous les fichiers dans un contexte, peu importe comment ils sont nommés, même index.html ou style.css.

AddHandler cgi-script .pl

est similaire, mais s'applique aux fichiers se terminant par .pl, dans un contexte donné. Vous pouvez choisir une autre extension ou plusieurs, si vous le souhaitez.

de plus, le module CGI doit être chargé et Options +ExecCGI configuré. Pour activer le module, édition

a2enmod cgi

et redémarrez ou rechargez Apache. Enfin, le script Perl CGI doit être exécutable. Donc les bits d'exécution doivent être définis

chmod a+x script.pl

et il doit commencer par

#! /usr/bin/perl

comme première ligne.


quand vous utilisez SetHandler ou AddHandler (et Options +ExecCGI) en dehors de toute directive, il s'applique globalement à tous les fichiers. Mais vous pouvez restreindre le contexte de un sous-ensemble en mettant ces directives à l'intérieur, par exemple Directory

<Directory /path/to/some/cgi-dir>
    SetHandler cgi-script
    Options +ExecCGI
</Directory>

SetHandler ne s'applique qu'aux fichiers dans /chemin/vers/un/cgi-dir au lieu de tous les fichiers du site web. En est de même avec AddHandler dans un Directory ou Location la directive, bien sûr. Il applique ensuite les fichiers dans /chemin/vers/un/cgi-dir, se terminant par .pl.

2
répondu Olaf Dietsche 2016-06-26 21:08:46

si vous avez installé avec succès Apache Web server et Perl, veuillez suivre les étapes suivantes pour exécuter cgi script en utilisant perl sur les systèmes ubuntu.

avant de commencer avec les scripts CGI, il est nécessaire de configurer le serveur apache de manière à reconnaître le répertoire CGI (où les programmes cgi sont sauvegardés) et à permettre l'exécution de programmes dans ce répertoire.

  1. Ubuntu répertoire cgi-bin réside habituellement dans le chemin /usr/lib , si ce n'est pas le cas, créez le répertoire cgi-bin en utilisant la commande suivante. cgi-bin devrait être dans cette voie elle-même.

     mkdir /usr/lib/cgi-bin
    
  2. lancez la commande suivante pour vérifier l'état de permission du répertoire.

     ls -l /usr/lib | less
    

vérifiez si la permission ressemble à "drwxr-xr-x 2 root 4096 2011-11-23 09:08 cgi - bin" si oui, passez à l'étape 3.

Si non, exécutez la commande suivante pour s'assurer du bon permission pour notre répertoire cgi-bin.

     sudo chmod 755 /usr/lib/cgi-bin
     sudo chmod root.root /usr/lib/cgi-bin
  1. donner l'autorisation d'exécution au répertoire cgi-bin

     sudo chmod 755 /usr/lib/cgi-bin
    

ainsi votre répertoire cgi-bin est prêt à démarrer. C'est là que vous mettez tous vos scripts cgi pour l'exécution. La prochaine étape consiste à configurer apache pour reconnaître le répertoire cgi-bin et permettre l'exécution de tous les programmes en informatique sous forme de scripts cgi.

configurer Apache pour exécuter le script CGI en utilisant perl

  1. une directive doit être ajoutée dans le fichier de configuration du serveur apache pour qu'il sache la présence de CGI et l'emplacement de ses répertoires. Allez d'abord à l'emplacement du fichier de configuration d'apache et ouvrez-le avec votre éditeur de texte préféré

    cd /etc/apache2/sites-available/ 
    sudo gedit 000-default.conf
    
  2. Copier le contenu ci-dessous dans le fichier 000-default.conf entre la ligne de codes "DocumentRoot/var/www/ html/" et "ErrorLog $ {APACHE_LOG_DIR} / error.journal"

    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    <Directory "/usr/lib/cgi-bin">
    AllowOverride None
    Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
    Require all granted
    

  3. redémarrez le serveur apache avec le code suivant

    sudo service apache2 restart
    
  4. maintenant nous devons activer le module cgi qui est présent dans les nouvelles versions d'ubuntu par défaut

    sudo a2enmod cgi.load
    sudo a2enmod cgid.load
    
  5. à ce stade, nous pouvons recharger le serveur web apache pour qu'il puisse lire à nouveau les fichiers de configuration.

    sudo service apache2 reload
    

la partie configuration d'apache est terminée. avec un échantillon cgi perl programme.

Tester

  1. allez dans le répertoire cgi-bin et créez un fichier cgi avec extension .pl

    cd /usr/lib/cgi-bin/
    sudo gedit test.pl
    
  2. copier le code suivant sur test.pl et garde ça pour toi.

    #!/usr/bin/perl -w
    print “Content-type: text/html\r\n\r\n”;
    print “CGI working perfectly!! \n”;
    
  3. maintenant, donnez le test.pl permission d'exécution.

    sudo chmod 755 test.pl
    
  4. Maintenant, ouvrez ce fichier dans votre navigateur web http://Localhost/cgi-bin/test.pl

  5. Si vous voyez la sortie "CGI fonctionne parfaitement" vous êtes prêt à aller.Maintenant, récupérez tous vos programmes dans le répertoire cgi-bin et commencez à les utiliser.

NB: N'oubliez pas de donner vos nouveaux programmes cgi-bin chmod 755 autorisations pour exécuter avec succès sans erreurs de serveur interne.

2
répondu Aparna Asok 2017-08-04 06:33:35

je suppose que vous avez jeté un oeil à mod_perl?

avez-vous essayé ce qui suit tutoriel?

EDIT: en relation avec votre message - peut-être pourriez-vous inclure un échantillon du code dans votre .cgi fichier. Peut-être même les premières lignes?

1
répondu toolkit 2009-02-18 14:14:53

pour ceux comme moi qui ont tâtonné votre chemin à travers beaucoup-plus-que-ce-que-vous-devez-savoir-maintenant tutoriels et Docs, et je veux juste voir la chose fonctionne pour les débutants, j'ai trouvé la seule chose que j'avais à faire était d'ajouter:

AddHandler cgi-script .pl .cgi

À mon fichier de configuration.

http://httpd.apache.org/docs/2.2/mod/mod_mime.html#addhandler

pour ma situation cela fonctionne le mieux car je peux mettre mon script perl n'importe où Je veux, et juste ajouter le .s'il vous plaît .extension de cgi.

la réponse de Dave Sherohman mentionne également la solution AddHandler.

bien sûr, vous devez toujours vous assurer que les autorisations de propriété sur votre script sont définies correctement, surtout que le script exécutable. Prenez note de qui est l '"utilisateur" lorsqu'il est lancé à partir d'une requête http - eg, www ou www-data.

0
répondu Allasso 2014-03-08 15:44:45