linux - enable - test apache cgi




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

Je voudrais configurer Apache 2 en cours d'exécution sur Kubuntu pour exécuter des scripts CGI Perl. J'ai essayé quelques étapes que je suis tombé sur googling, mais rien ne semble fonctionner.

Quelle est la bonne façon d'y parvenir?


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

Résultat possible d'une configuration incorrecte Apache 2:

  1. Navigateur essayant de télécharger le fichier .pl au lieu d'exécuter et de donner le résultat.
  2. Interdit.
  3. Erreur Interne du Serveur.

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

Avant de commencer les étapes. Allez dans le fichier /etc/hosts et ajoutez l'adresse IP / le nom de domaine par exemple:

127.0.0.1 www.BECK.com

Étape 1: Installez apache2 Étape 2: Installez mod_perl Étape 3: Configurez apache2

ouvrir les sites-available/default et ajouter les éléments suivants,

<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 fichier /etc/apache2/apache2.conf .

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, seulement après avoir fait cette étape, je l'ai eu à travailler.

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 6

Très important , ou du moins je suppose, seulement après avoir fait cette étape, je l'ai eu à travailler.

Ajoutez ce qui suit dans votre fichier /etc/apache2/sites-enabled/000-default

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

Étape 7:

Maintenant, ajoutez votre script Perl comme test.pl à l'endroit où vous avez mentionné à l'étape 3 en tant que [ path-where-you-want-your-.pl-et-.cgi-fichiers ].

Donnez des permissions au fichier .pl en utilisant chmod puis, tapez l' webaddress/cgi-bin/test.pl dans la barre d'adresse du navigateur, webaddress/cgi-bin/test.pl , vous l'avez.

(Maintenant, beaucoup de choses auraient été redondantes dans ce post.) Veuillez l'ignorer.)


Depuis Ubuntu 12.04 (Precise Pangolin) (et peut-être une version ou deux auparavant) 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 devez faire.


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

Avez-vous essayé le tutorial suivant?

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


Pour ceux qui, comme moi, se frayaient un chemin à travers des didacticiels et des docs bien plus que ce que vous aviez besoin de savoir maintenant, et que vous vouliez juste voir ce qui fonctionnait pour les débutants, j'ai trouvé la seule chose que j'avais faire était d'ajouter:

AddHandler cgi-script .pl .cgi

Dans mon fichier de configuration

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

Pour ma situation, cela fonctionne mieux que je peux mettre mon script Perl n'importe où je veux, et il suffit d'ajouter l'extension .pl ou. Cgi.

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

Bien sûr, vous devez toujours vous assurer que les permissions / propriété sur votre script sont correctement définies, en particulier que le script sera exécutable. Prenez note de qui est le "utilisateur" lorsqu'il est exécuté à partir d'une requête http - par exemple, www ou www-data.


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

  1. Le programme CGI se trouve dans un répertoire dont l'exécution CGI n'est pas activée. Solution: Ajoutez l'option ExecCGI à ce répertoire via httpd.conf ou un fichier .htaccess.

  2. Apache est uniquement configuré pour exécuter des CGI à partir d'un répertoire cgi-bin dédié. Solution: Déplacez le programme CGI ou ajoutez une instruction AddHandler cgi-script .cgi à httpd.conf.

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

  4. Le programme CGI quitte sans envoyer d'en-têtes. Solution: Exécutez le programme à partir de la ligne de commande et vérifiez que a) il s'exécute plutôt que de mourir avec une erreur de compilation et b) il génère la sortie correcte, qui doit inclure, au minimum, un en Content-Type tête Content-Type et une ligne vide suivant le dernier de ses en-têtes.


(La recherche Google 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 (quoique bash pas perl). Apache avait une config de ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ cependant le journal d'erreur d'Apache a montré que le File does not exist: /var/www/cgi-bin/test.html .

J'ai essayé de placer le script dans /usr/lib/cgi-bin/ et /var/www/cgi-bin/ mais aucun ne fonctionnait.

Après une session de googling prolongée ce qui l'a fissuré pour moi était sudo a2enmod cgi et tout est tombé en place en utilisant /usr/lib/cgi-bin/ .





cgi