web-dev-qa-db-fra.com

Comment exécuter des scripts CGI sur Nginx

J'ai des problèmes pour configurer des scripts CGI à exécuter sur Nginx, jusqu'à présent, j'ai trouvé http://wiki.nginx.org/SimpleCGI ce genre de choses mais le problème est que je ne peux pas créer de script Perl exécuter en tant que service afin qu'il s'exécute en arrière-plan et même en cas de redémarrage, il s'exécutera automatiquement

Avez-vous une idée? J'utilise Centos 5

J'ai trouvé quelques solutions ici mais je n'ai pas pu intégrer le code qui y est donné avec ce script Perl Je suis complètement nul chez Perl, aidez-moi s'il vous plaît Merci

20
Askhat

Nginx est un serveur web. Vous devez utiliser un serveur d'applications pour votre tâche, tel que WSGI par exemple. Il peut parler avec nginx en utilisant son interface binaire très efficace native appelée uwsgi.

13
VBart

Installez un autre serveur Web (Apache, Lighttpd) qui s'exécute sur un port différent. Procurez-vous ensuite votre requête CGI au serveur Web avec nginx.

Vous avez juste besoin d'ajouter ceci à la configuration nginx, après avoir installé un serveur web sur 8080

location /cgi-bin {
    proxy_pass http://127.0.0.1:8080;
}

Jetez un oeil à Nginx Location Directive Explained pour plus de détails.

13
Burak Tamtürk

Nginx n'a pas de support CGI natif (il prend en charge fastCGI à la place). La solution typique consiste à exécuter votre script Perl en tant que processus fastCGI et à modifier le fichier de configuration nginx pour rediriger les demandes vers le processus fastCGI. C'est une solution assez complexe si tout ce que vous voulez faire est d'exécuter un script CGI.

Devez-vous utiliser nginx pour cette solution? Si tout ce que vous voulez faire est d'exécuter certains scripts CGI Perl, envisagez d'utiliser Apache ou Lighttpd car ils sont livrés avec des modules CGI qui traiteront vos scripts CGI de manière native et ne nécessitent pas que le script soit exécuté en tant que processus séparé. Pour ce faire, vous devez installer le serveur Web et modifier le fichier de configuration du serveur Web pour charger le module CGI. Pour Lighttpd, vous devrez ajouter une ligne dans le fichier de configuration pour permettre le traitement des fichiers CGI. Ensuite, placez les fichiers CGI dans le dossier cgi-bin.

12
David Farrell

J'ai trouvé ce hack en utilisant FastCGI pour être un peu plus agréable que d'exécuter un autre serveur Web. http://nginxlibrary.com/Perl-fastcgi/

3
Alton Yu

J'ai trouvé ceci: https://github.com/ruudud/cgi Il dit:

===

On Ubuntu: apt-get install nginx fcgiwrap
On Arch: pacman -S nginx fcgiwrap

Example Nginx config (Ubuntu: /etc/nginx/sites-enabled/default):

server {
    listen   80;
    server_name  localhost;
    access_log  /var/log/nginx/access.log;

    location / {
        root /srv/static;
        autoindex on;
        index index.html index.htm;
    }

    location ~ ^/cgi {
        root /srv/my_cgi_app;
        rewrite ^/cgi/(.*) /$1 break;

        include fastcgi_params;
        fastcgi_pass unix:/var/run/fcgiwrap.socket;
        fastcgi_param SCRIPT_FILENAME /srv/my_cgi_app$fastcgi_script_name;
    }
}

Remplacez les lignes racine et fastcgi_param par un répertoire contenant des scripts CGI, par ex. le cgi-bin/dir dans ce référentiel.

Si vous êtes un maniaque du contrôle et exécutez fcgiwrap manuellement, assurez-vous de changer fastcgi_pass en conséquence. Le chemin d'accès répertorié dans l'exemple est celui par défaut dans Ubuntu lors de l'utilisation de la configuration fcgiwrap prête à l'emploi.

===

Je suis sur le point de l'essayer.

1
Brad Allen