ActivePerl Documentation
|
NAMEActivePerl faq6 - web server info DESCRIPTIONActivePerl Web Server Configuration and Troubleshooting What HTTP servers support ActivePerl?Most Windows NT and Windows 95 servers that use the CGI standard or ISAPI will run ActivePerl scripts. The following servers are known to work with ActivePerl (known protocols in brackets):
There's a list of web servers for Windows, Windows 95, and Windows NT on this Yahoo Page:
http://www.yahoo.com/Computers_and_Internet/Software/Internet/World_Wide_Web/Servers/Microsoft_Windows_Windows_95/
(That's all one URL.) How do I use ActivePerl under Apache?If you want to put all of your CGI scripts into one directory, add the following line to your srm.conf file (You can choose any directory you'd like, but make sure it exists):
ScriptAlias /cgi-bin/ "C:/Program Files/Apache Group/Apache/cgi-bin/"
After you have made this change, stop and restart the Apache service. Apache provides an emulation of the UNIX shebang (#!/path/to/perl) syntax, so the next step is easy. You can put you Perl scripts into your cgi-bin directory, as long as you have a path to a valid interpreter at the top. For example:
#!C:\PERL\5.00464\bin\MSWin32-x86\perl.exe
use CGI qw(:standard) ;
print header();
print "Hello, world";
If you want to enable CGI scripts based on an extension, such as .pl, you need to add the following line to srm.conf:
AddHandler cgi-script .pl
By default, CGI scripts are not allowed in your DocumentRoot directory, but they are allowed in other document directories. Document directories are created with the Alias command in srm.conf:
Alias /ResourceKit/ "E:/utilsamp/"
You can then include files that end in .pl within a document directory. You will still need to include the #! line with the full path to the perl.exe interpreter, as shown earlier. If you want to allow CGI scripts in the DocumentRoot directory, add the ExecCGI option to the Options directive between the <Directory> and </Directory> entry for your DocumentRoot in access.conf (these appear directly after the comment titled:
# This should be changed to whatever you set DocumentRoot to.
After you have updated it, your Options directive may look something like:
Options Indexes FollowSymLinks ExecCGI
How do I configure the EMWAC https server to support ActivePerl?First, read the EMWAC documentation:
http://emwac.ed.ac.uk/html/internet_toolchest/https/scripts.htm
You need to follow these steps:
When the EMWAC server gets an HTTP request for a file with a .pl
extension, it tries to execute By default, the ActivePerl installation puts the path to perl.exe in
Because the EMWAC server runs as a service (see What
is a Windows NT service?), you need to take special steps to make files and
environment variables like How do I configure IIS 3.0 or lower to support ActivePerl?By default, the ActivePerl installation maps the .plx extension to Perl for ISAPI. You can override the extension used during installation. Because the installation does this only when IIS is already installed, you must install IIS first, then install ActivePerl. If you need to reconfigure these settings, or if you must set these by hand, the instructions in this section will prove useful. Microsoft Internet Information Server (IIS) ships with Windows NT Server. Peer Web Services (PWS) ships with Windows NT Workstation. Configuring the products is essentially the same. First, you should consult Chapter 8, Publishing Information and Applications, in the IIS documentation. You need to follow these steps to get ActivePerl scripts to run under IIS:
You need to restart the web service after making the Registry changes or installing Perl. Because IIS runs as a service (see What is a Windows NT service?), you need to take special steps to make sure that files and environment variables are available to it. How do I configure Microsoft IIS 4.0 to support ActivePerl?Microsoft IIS 4.0 ships with Windows NT Server 5.0, and PWS 4.0 ships with Windows NT Workstation 5.0. Both IIS and PWS are available as part of the Microsoft Windows NT 4.0 Option Pack. You can find a link to the Option Pack at http://www.microsoft.com/iis/ To configure IIS or PWS 4.0 to run Perl scripts:
Because IIS runs as a service (see What is a Windows NT service?), you need to take special steps to make sure that files and environment variables are available to it. How do I configure Netscape web servers to support ActivePerl?If you're using Netscape 1.x servers, you must wrap your Perl scripts in batch files. Refer to these Netscape tech notes:
http://help.netscape.com/kb/server/960513-3.html
http://help.netscape.com/kb/server/960513-125.html
The following information is for Netscape FastTrack Server 2.0. Other 2.0 and 3.0 Netscape Servers (Communications, Enterprise) should be similar. To set up ActivePerl to run on FastTrack Server, follow these steps:
If you would like to access Perl CGI scripts in other directories, you need to associate an extension, such as .pl, with the shellcgi MIME type. Before you follow these steps, you must add at least one Shell CGI directory - this will enable shellcgi on your server (you can delete this directory, and shellcgi will remain enabled). Follow these steps to associate .pl with the shellcgi MIME type:
If you are having trouble running Perl scripts on your Netscape server, check the following:
One nice thing about FastTrack server is that the Error Log will give detailed reasons why your CGI script isn't running, so this is a good thing to check first when you are having configuration problems. Because Netscape servers run as services (see What is a Windows NT service?), you need to take special steps to make sure that files and environment variables are available to them. Some people have reported problems with handling POST'ed data with Perl programs with Netscape servers. Since Netscape apparently uses associations to run scripts, and POST'ed data is sent on STDIN to a program. This may be related to the problems with redirection. How do I configure WebSite 1.0 to support ActivePerl?The following information is for setting up O'Reilly WebSite to use ActivePerl for standard CGI (not PerlIS).
Because WebSite servers run as services (see What is a Windows NT service?), you need to take special steps to make sure that files and environment variables are available to them. How do I configure WebSite Professional to support ActivePerl?The following information is for setting up O'Reilly WebSite Professional to use ActivePerl CGI (not PerlIS).
If you have trouble running scripts, ensure that the script is readable by the account used by the WebSite service. Generally, this means you should make the script readable by the Everyone group. Also, ensure that all supporting files, like the perl binary files, the perl library files, and the modules that you use, are all readable by the account used by the WebSite service (i.e., the Everyone group). Because WebSite servers run as services (see What is a Windows NT service?), you need to take special steps to make sure that files and environment variables are available to them. How do I configure Purveyor to support ActivePerl?The following instructions are for Purveyor 1.2 for Windows NT. Other Purveyor products should be similar.
If you have problems while configuring Purveyor to use ActivePerl, you can use the Enable Tracing checkbox in the Logging tab of the Purveyor Control Panel applet to trace HTTP requests and responses. Because Purveyor runs as a service (see What is a Windows NT service?), you need to take special steps to make sure that files and environment variables are available to it. How do I configure Microsoft Personal Web Server 1.0x for Windows 95 to support ActivePerl?Microsoft Personal Web Server for Windows 95 is a scaled-down version of Microsoft Internet Information Server. Although it is not documented, it appears that the method used to support ActivePerl with IIS will also work with Personal Web Server. See How do I configure IIS 3.0 or lower to support ActivePerl?. How do I configure other web servers to support ActivePerl?If your web server isn't listed, check the server's documentation on how to set up a CGI interpreter. In general the process is as follows:
Because most web servers run as services (see How do I configure IIS 3.0 or lower to support ActivePerl?), you need to take special steps to make sure that files and environment variables are available to them. My program runs fine from the command line, but bombs out when run as a CGI script.Usually, this means one of two things: either you have misconfigured your system, or your script does not output the right stuff to be a CGI script. Before you do anything else, check this list:
Check the information above with a script that you know produces the right output for the CGI protocol (scripts in this FAQ are a good first choice). Try it with your own script after you're sure the test script will work. If you are sure the server is running the script, but it only generates error messages in your browser, there are some tools that may help you out. CGI::Carp is used to send debugging information to the browser or log file. Even if your script has a compilation error, it can usually intercept and report errors. To use CGI::Carp, include the following lines in your program:
# The stuff in the BEGIN block will be executed very early
# on, even before the rest of this script is parsed.
#
BEGIN {
# Use the CGI::Carp module and import the carpout() function.
#
use CGI::Carp qw(carpout);
# Send warnings and die messages to the browser.
#
carpout(STDOUT);
}
If your script has an error, you may see something like this in the browser:
[Wed Jun 3 09:32:28 1998] C:\inetpub\scripts\test.pl: Error message! at
C:\inetpub\scripts\test.pl line 38.
Sometimes, it can be helpful to put yourself in somebody else's position. The libwww-perl bundle (LWP) is available from CPAN, but you can install it using the Perl Package Manager (PPM). LWP may be included with future releases of ActivePerl. LWP includes the powerful lwp-request script, which lets you see
things from the browser's perspective. Invoke lwp-request with the name
of a URL to see the content of the response, as in
C:\>lwp-request -de http://localhost
Date: Wed, 03 Jun 1998 13:37:31 GMT
Accept-Ranges: bytes
Server: Microsoft-IIS/4.0
Content-Length: 4325
Content-Location: http://localhost/Default.htm
Content-Type: text/html
ETag: "0c1e58b063bd1:1237"
Last-Modified: Thu, 09 Apr 1998 12:09:28 GMT
Client-Date: Wed, 03 Jun 1998 13:37:31 GMT
Client-Peer: 127.0.0.1:0
This tool can be very helpful in figuring out exactly what your scripts are doing. Whatever you do, don't give up hope. It is, in fact, possible to get a Perl script running on your web server. Really. This is all such a hassle; why can't I just put perl.exe in my CGI directory and use it in my URL?First, the warning: DON'T DO THIS. REALLY. EVEN IF YOU DON'T UNDERSTAND WHY NOT, DON'T. Now the explanation: the idea here is to put perl.exe in your CGI directory (however you configure that on your server), and use URL syntax like the following:
http://soon.to.be.a.victim.net/cgi-bin/perl.exe?myscript.pl
to run myscript.pl. This keeps you from having to figure out how to configure your server to associate extensions like .pl with an interpreter like perl.exe. In fact, on some early Win32-based web servers (Netscape 1.x servers in particular), it was impossible to associate a script file with an interpreter. This method was recommended by vendors as a viable approach to running Perl scripts on your web server. Anyone with a devious mind and a little knowledge of Perl can see that with
this configuration, hackers could start doing all kinds of horrible things on
the server. All they'd have to do is send made-up URLs, using the
http://aaaugh.that.hurts.net/cgi-bin/perl.exe?-e?'del%20c:\*.*%20/S%20/Q'
Of course, a true computer criminal would never do something so crude and obvious, but would instead use this as a launching point to cause irreparable harm to your organization. The following URL covers this issue in more depth:
ftp://cert.org/pub/cert_advisories/CA-96.11.interpreters_in_cgi_bin_dir
Tom Christiansen has also written a good discussion of the subject:
http://www.perl.com/perl/news/latro-announce.html
Note that one suggested solution to this problem is wrapping your Perl script in a batch file using pl2bat or your own custom batch code. THIS IS ALSO NOT GOOD. Most of the primitive servers that won't allow file associations are also susceptible to a bug that allows a user to enter any DOS command after the bat file. For more information on CGI and web server security, see these URLs:
Web: http://www-genome.wi.mit.edu/WWW/faqs/www-security-faq.html
As a final note, there are so many good, free web servers out there for Windows NT and Windows 95 that you should never stay with an old, insecure web server. AUTHOR AND COPYRIGHTThis FAQ was originally assembled and maintained by Evangelo Prodromou. evangelo@endcontsw.com. It has been revised and updated by Brian Jepson of O'Reilly and Associates, and David Grove and David Dmytryshyn of ActiveState. This FAQ is in the public domain. If you use it, however, please ensure that you give credit to the original authors.
|