Main Content

Configuring httpd, or Tomcat, to run CGI scripts in Perl

Archive - Originally posted on "The Horse's Mouth" - 2009-06-05 15:32:30 - Graham Ellis

Here's a Perl / CGI script - a "Common Gateway Interface" program that I want to run on my web server, and access via my browser. What server to I need to run it on, and how do I set that server up?

#!/usr/bin/perl
 
print ("Content-type: text/html\n\n");
$now = localtime();
 
print "<h1>It really is<h1>$now";
 


You can run CGI (and through it Perl Scripts like the one above) on either the Tomcat OR the httpd servers. It will run on httpd, and it will walk on Tomcat as it's in a Java servlet container ;-) ... but if you've only a bit to do, you choose.

How do we set 'em up?

Tomcat

1. In the conf/web.xml file, enable the cgi servlet and also allow for all URLs that start /cgi-bin to be routed to it.

2. In the server/lib directory, rename servlets-cgi.renametojar to servlets-cgi.jar

3. In the WEB-INF folder in your web application, add a cgi folder and place your CGI script in there.

4. Stop / Restart your Tomcat.

5. Try it out! http://whereverserver:myport/appname/cgi-bin/script.pl (and you can route it via httpd and mod_proxy and balancer too if they're in use!)

httpd

1. In the conf/httpd.conf file, change the ScriptAlias for cgi-bin to point to the directory you'll be using for CGI - usually a sibling to your htdocs directory.

2. In the same file, set the Options for that directory to include ExecCGI

3. Create the directory for the CGI scripts if it doesn't already exist

4. Add a CGI script to the cgi-bin folder, making sure that it's executable!

5. Stop / Restart your httpd

6. Try it out! http://whereverserver/cgi-bin/script.pl

Some Interesting Extras!

1. You can point both configurations to the same cgi directory, so that scripts can be run by either httpd or Tomcat (If you do the same with your web applications, it means that a single web application ans all its support files can be kept in the same place, irrespective of which server serves which parts.)

2. You can have one instance of httpd forwarding to other instances of httpd through mod_proxy_httpd and mod_proxy_balancer, allowing a single domain name and port to be served by multiple machines through a single front end. A great solution when the traffic load is too high for one machine, but too low for an sophisticated solution such as a hardware load balancer.

We cover the setup of Apache http on our Linux Web Server course and the setup of Apache Tomcat on our Apache httpd and Tomcat course.





Illustration. We often get delegates on our more specialised courses from other countries in Europe, or even from other continents. And when we have a visitor who's not seen England before, we'll take extra time after the course has finished for the day to show them around our beautiful area. In this case, a delegate from Cyprus sees some of the stones at Avebury.