Serving CGI Scripts With Nginx On Fedora 15
|
Submitted by falko (Contact Author) (Forums) on Fri, 2011-11-04 16:53. :: Fedora | Web Server | nginx
Serving CGI Scripts With Nginx On Fedora 15Version 1.0 This tutorial shows how you can serve CGI scripts (Perl scripts) with nginx on Fedora 15. While nginx itself does not serve CGI, there are several ways to work around this. I will outline two solutions: the first is to proxy requests for CGI scripts to Thttpd, a small web server that has CGI support, while the second solution uses a CGI wrapper to serve CGI scripts. I do not issue any guarantee that this will work for you!
1 Preliminary NoteI'm using the website www.example.com here with the document root /var/www/www.example.com/web/; the vhost configuration is located in /etc/nginx/conf.d/www.example.com.vhost.
2 Using ThttpdIn this chapter I am going to describe how to configure nginx to proxy requests for CGI scripts (extensions .cgi or .pl) to Thttpd. I will configure Thttpd to run on port 8000. First we install Thttpd. There is a Thttpd package for Fedora 15, but the nginx ThttpdCGI page says that Thttpd should be patched - therefore we download the src.rpm package for Fedora 15, patch it and build a new rpm package from it. We need to install the tools that are required to build a new rpm package: yum groupinstall 'Development Tools' Install yum-utils (the package contains the yumdownloader tool which allows us to download a src.rpm): yum install yum-utils Next we download the Thttpd src.rpm package for Fedora 15: cd /usr/src ls -l [root@server1 src]# ls -l rpm -ivh thttpd-2.25b-24.fc15.src.rpm You can ignore the following warnings: [root@server1 src]# rpm -ivh thttpd-2.25b-24.fc15.src.rpm Now we download the patch to the /root/rpmbuild/SOURCES/ directory and modify the /root/rpmbuild/SPECS/thttpd.spec file accordingly: cd /root/rpmbuild/SOURCES/ Add the lines Patch3: thttpd-2.25b-ipreal.patch and %patch3 -p1 -b .ipreal:
Now we build our Thttpd rpm package as follows: rpmbuild -ba thttpd.spec Our Thttpd rpm package is created in /root/rpmbuild/RPMS/x86_64 (/root/rpmbuild/RPMS/i386 if you are on an i386 system), so we go there: cd /root/rpmbuild/RPMS/x86_64 [root@server1 x86_64]# ls -l Install the Thttpd package as follows: rpm -ivh thttpd-2.25b-24.fc15.x86_64.rpm Then we make a backup of the original /etc/thttpd.conf file and create a new one as follows: mv /etc/thttpd.conf /etc/thttpd.conf_orig
This will make Thttpd listen on port 8000 on 127.0.0.1; its document root is /var/www. Create the system startup links for Thttpd... chkconfig --levels 235 thttpd on ... and start it: /etc/init.d/thttpd start Next create /etc/nginx/proxy.conf: vi /etc/nginx/proxy.conf
Now open your vhost configuration file... vi /etc/nginx/conf.d/www.example.com.vhost ... and add a location /cgi-bin {} section to the server {} container:
Reload nginx: /etc/init.d/nginx reload Because Thttpd's document root is /var/www, location /cgi-bin translates to the directory /var/www/cgi-bin (this is true for all your vhosts, which means each vhost must place its CGI scripts in /var/www/cgi-bin; this is a drawback for shared hosting environments; the solution is to use a CGI wrapper as described in chapter 3 instead of Thttpd). Create the directory... mkdir /var/www/cgi-bin ... and then place your CGI scripts in it and make them executable. For testing purposes I will create a small Hello World Perl script (instead of hello_world.cgi you can also use the extension .pl -> hello_world.pl): vi /var/www/cgi-bin/hello_world.cgi
chmod 755 /var/www/cgi-bin/hello_world.cgi Open a browser and test the script: http://www.example.com/cgi-bin/hello_world.cgi If all goes well, you should get the following output:
|





Recent comments
21 hours 50 min ago
1 day 46 min ago
1 day 2 hours ago
1 day 3 hours ago
1 day 5 hours ago
1 day 6 hours ago
1 day 7 hours ago
1 day 23 hours ago
2 days 31 min ago
2 days 4 hours ago