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?
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:
- navigateur essayant de télécharger le .pl file au lieu d'exécuter et de donner le résultat.
- Interdit.
- 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.)
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:
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.Apache n'est configuré que pour exécuter CGIs à partir d'un
cgi-bin
répertoire. Solution: déplacer le CGI programme ou ajouter unAddHandler cgi-script .cgi
déclaration à httpd.conf.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
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.
(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/
.
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.
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
.
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.
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
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
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
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
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
redémarrez le serveur apache avec le code suivant
sudo service apache2 restart
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
à 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
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
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”;
maintenant, donnez le test.pl permission d'exécution.
sudo chmod 755 test.pl
Maintenant, ouvrez ce fichier dans votre navigateur web http://Localhost/cgi-bin/test.pl
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.
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.