如何在Nginx上运行CGI脚本

lyr7nygr  于 2023-06-28  发布在  Nginx
关注(0)|答案(6)|浏览(200)

我有问题设置CGI脚本在Nginx上运行,到目前为止,我已经找到了http://wiki.nginx.org/SimpleCGI这个东西,但问题是,我不能使Perl脚本作为服务运行,以便它将在后台运行,即使在重新启动的情况下,它也会自动开始运行
你知道吗?我在运行Centos5
我已经找到了一些解决方案here,但我不能集成代码与this Perl script我在Perl完全为零,请帮助我谢谢

zpf6vheq

zpf6vheq1#

Nginx不支持原生CGI(它支持fastCGI)。典型的解决方案是将Perl脚本作为fastCGI进程运行,并编辑nginx配置文件以将请求重定向到fastCGI进程。如果你只想运行一个CGI脚本,这是一个相当复杂的解决方案。
你必须使用nginx来解决这个问题吗?如果你想做的只是执行一些Perl CGI脚本,考虑使用Apache或Lighttpd,因为它们附带了CGI模块,这些模块将原生处理你的CGI脚本,不需要脚本作为一个单独的进程运行。为此,您需要安装Web服务器并编辑Web服务器配置文件以加载CGI模块。对于Lighttpd,您需要在配置文件中添加一行来启用CGI文件的处理。然后将CGI文件放入cgi-bin文件夹。

1sbrub3j

1sbrub3j2#

安装另一个运行在不同端口上的Web服务器(Apache,Lighttpd)。然后使用nginx将CGI请求代理到Web服务器。
你只需要在8080上安装一个web服务器后,将其添加到nginx配置中即可

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

查看Nginx Location Directive Explained以了解更多详细信息。

clj7thdc

clj7thdc3#

Nginx是一个Web服务器。您需要为您的任务使用应用程序服务器,例如uWSGI。它可以使用其本地非常有效的二进制接口uwsgi与nginx进行对话。

ktecyv1j

ktecyv1j4#

我发现这个使用FastCGI的黑客比运行另一个Web服务器要好一点。http://nginxlibrary.com/perl-fastcgi/

2ledvvac

2ledvvac5#

我发现了这个:https://github.com/ruudud/cgi说道:

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;
    }
}

将root和fastcgi_param行更改为包含CGI脚本的目录,例如此存储库中的cgi-bin/ dir。
如果您是一个控制狂,并且手动运行fcgiwrap,请确保相应地更改fastcgi_pass。示例中列出的路径是Ubuntu中使用开箱即用的fcgiwrap设置时的默认路径。

我正准备试试。

5w9g7ksd

5w9g7ksd6#

基于布拉德的回答,简化和现代化,以CGI与Awstats为例:

location ~ ^/cgi-bin/awstats\.pl {

        root /usr/lib/cgi-bin;
        rewrite ^/cgi-bin/(.*) /$1 break;

        include fastcgi.conf;
        fastcgi_pass unix:/run/fcgiwrap.socket;
}

您需要安装fcgiwrap包。

相关问题