如何在Nginx上运行CGI脚本

时间:2012-07-26 10:36:43

标签: perl nginx cgi centos

我在设置要在Nginx上运行的CGI脚本时遇到问题,到目前为止我发现http://wiki.nginx.org/SimpleCGI这个问题但问题是我不能让perl脚本作为服务运行,以便它将在后台运行即使在重新启动的情况下,它也会自动开始运行

你知道吗?我正在运行Centos 5

我找到了一些解决方案here,但我无法将其中的代码与this Perl script集成 我在Perl完全零,请帮助我 谢谢

5 个答案:

答案 0 :(得分:12)

Nginx没有本机CGI支持(它支持fastCGI)。典型的解决方案是将Perl脚本作为fastCGI进程运行,并编辑nginx配置文件以将请求重定向到fastCGI进程。如果您只想运行CGI脚本,这是一个非常复杂的解决方案。

你必须使用nginx这个解决方案吗?如果您只想执行一些Perl CGI脚本,请考虑使用Apache或Lighttpd,因为它们带有CGI模块,这些模块将本地处理您的CGI脚本,并且不要求脚本作为单独的进程运行。为此,您需要安装Web服务器并编辑Web服务器配置文件以加载CGI模块。对于Lighttpd,您需要在配置文件中添加一行以启用CGI文件的处理。然后将CGI文件放入cgi-bin文件夹。

答案 1 :(得分:12)

安装另一个在不同端口上运行的Web服务器(Apache,Lighttpd)。然后使用nginx将您的CGI请求代理到网络服务器。

在8080上安装Web服务器之后,您只需将此添加到nginx配置

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

请查看Nginx Location Directive Explained了解详情。

答案 2 :(得分:11)

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

答案 3 :(得分:2)

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

答案 4 :(得分:1)

我发现了这一点: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 /目录。

如果您是控制狂,并且手动运行fcgiwrap,请确保相应地更改fastcgi_pass。使用开箱即用的fcgiwrap设置时,示例中列出的路径是Ubuntu中的默认路径。

===

我要尝试。