old-www/LDP/LG/issue31/pelletier.html

179 lines
8.4 KiB
HTML

<!--startcut ==========================================================-->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<title>The Roxen Challenger Web Server LG #31</title>
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#A000A0"
ALINK="#FF0000">
<!--endcut ============================================================-->
<H4>
"Linux Gazette...<I>making Linux just a little more fun!</I>"
</H4>
<P> <HR> <P>
<!--===================================================================-->
<font color="navy">A <I>Linux Journal</I> Preview</font>:
This article will appear in the November issue of <I>Linux Journal</I>.
<P> <HR> <P>
<center>
<H1><font color="maroon">Product Review: The Roxen Challenger Web Server</font></H1>
<H4>By <a href="mailto:michel@colint.com">Michael Pelletier</a></H4>
</center>
<P> <HR> <P>
<ul>
<li>Manufacturer: Idonex
<li>E-mail: info@idonex.com
<li>URL: http://www.roxen.com/
<li>Price: $795 US for Idonex License
Free download of 1.2 beta (GPL)
<li>Reviewer:
</ul>
<P> <HR> <P>
The Roxen Challenger HTTP Web Server is a marvel ahead of it's time.
That's a bold, hard-to-prove statement for a web server when compared to the
amazing success of the Apache HTTP Server. Before you stop reading this,
you should consider that there is nothing wrong with having two subtly
different, but very good tools.
<p>
Apache is designed from the ground up to be a simple, open, secure,
high-performance HTTP server, and it pays up in spades. Apache is the
natural choice for almost all web administrators weaned on NCSA CERN or a
commercial HTTP server like Netscape. However, Apache is not exactly
intuitive to configure, the configuration in question being three flat text
files. Apache also suffers from a monolithic structure (albeit plug-in
modularity is a new option if you compile it in) which requires recompiling
the source code when making changes or adding modules (such as proxy, database
access, etc.).
<p>
Roxen takes a different approach to HTTP server design. Roxen is easily
installed and configured. The user need only do the normal
<tt>./configure</tt> and <tt>make</tt> sequences after
unpacking the tar file and reading the README file.
This has worked flawlessly for me a dozen times on Intel Red Hat 4.2 and 5.0
machines. After compiling the Pike interpreter (we'll get to that), the
installation script tells you to point your browser to
http://localhost:<i>x</i>/, <i>x</i> being some random unassigned port. Where
the configuration interface server listens for your browser.
<p>
Pointing a browser to that URL brings up the on-line, web-centric configuration
interface. The first screen sets the configuration user and password
information for subsequent configuration sessions. Immediately, virtual
servers can be added, and adding a virtual server is a snap. My usual sequence
is to find a free IP and bind the hostname.domain to it. Create the aliased
Ethernet interface with <b>netcfg</b> specifying the chosen IP, switch to the Roxen
configuration interface and add a new server binding it (using simple, point and
click menus) to the interface just created, which Roxen automatically detects
and reverse looks up for me. Voil<\#225>, I have an instant virtual server;
the whole process taking less time than making a cup of coffee.
<p>
When creating the server, Roxen asks questions about what kind of server
is desired. The choices of Bare Bones, Standard, IPP (Internet Presence
Provider), Proxy or a copy of the configurations for any current servers in the
system. This gives lots of flexibility when working with more than just a
few virtual servers.
<p>
Each of the four choices is a certain set of loaded modules for each server.
Modules can be mixed and matched to make custom servers. Modules, also
written in Pike, can be loaded and
unloaded on the fly, and all Modules have a standard configuration interface
that plugs into the server configuration interface. Modules include the
file system, authentication, database access, CGI and FCGI execution,
on-the-fly graphics manipulation and more.
<p>
So how is this marvelous server put together? Roxen is written in the Pike
language. Pike is an interpreted, threaded C-like language based on an
older programming language for MUD systems. Pike is full blown and has a
graceful, clean style so much like C that any C programmer can pick
it up in minutes. This makes writing custom Roxen modules a snap. Pike's
home page has excellent, intelligently written documentation that is
completely cross-referenced, and includes a handy function index where many
old familiar buddies from the ANSI C libraries can be found.
<p>
The downside is that Pike, being a byte code interpreted language, is slower
than compiled and optimized C by a noticeable margin. Roxen 1.1 is also a bit
buggy, and Roxen 1.2 is still in beta. Having dabbled in 1.2 (which
installed <i>just</i> as cleanly as 1.1), I found it very cool with many new
modules, some of which are not available for Apache, such as on-the-fly
wizard generators and automatic table-formatting of SQL retrieved data.
A new update module contacts the Roxen central server in
Sweden and upgrades the server and all the modules to the newest
debugged versions, as well as offering to download any <i>new</i>
modules Idonex has created. 1.2 also uses the new threading built into the
latest version of Pike, increasing its performance for high or
eccentric load systems and allowing it to take advantage of multi-processor
systems.
<p>
The most powerful module in the Roxen set is the Roxen Mark-up Language
(RXML). RXML looks like HTML and is written directly into the HTML code.
When a client retrieves a document from the server, the server first parses
the document for RXML tags, changing the HTML output based on the tags used.
This is basically server side scripting ala server side Includes, in the
Apache parlance, but cleaner. For example:
<p>
<pre>
&lt;html>
&lt;head>
&lt;body>
&lt;if user=jane>
&lt;gtext scale=0.5 nfont=&quot;arial&quot; fg=&quot;blue&quot;
bg=&quot;white&quot;>Hi there Jane.&lt;/gtext>&lt;br>
&lt;else>
&lt;h1>Hey get outta here!&lt;/h1>
&lt;/if>
&lt;/body>&lt;/head>&lt;/html>
</pre>
The <tt>&lt;if>&lt;else>&lt;/if></tt> construct outputs different
HTML depending on whether the client fetching the page has authenticated
itself as the user <tt>jane</tt>. The <tt>&lt;gtext></tt> tag takes the text
and renders a gif image of it, on the fly, replacing the
<tt>&lt;gtext></tt> tag with an <tt>&lt;img></tt> tag whose
<b>src</b> is the generated image. Many options to gtext are
available including
transparency, sizes, bevels, automatic Javascript mouse responses and more.
Check out Roxen's home page for an example, or the
American Association for the Surgery of Trauma web page, where I used gtext
and RXML extensively.
<p>
Roxen's extreme ease of use and modularity make it a powerful tool for web
managers of all needs. The GNU GPL license for Roxen and Pike make the
price just right. Like all good GPL software, Pike and Roxen are backed by
an active, sharp Internet crowd of Pike programmers and Roxen-heads eager to
help you with your questions. Idonex also offers various levels of support
for very reasonable prices. The Roxen Server comes pre-packaged with a
manual and other non-GPL goodies (like 128bit SSL) from Idonex.
<P>
<h3>Resources</h3>
<p>
Pike Home Page: <A HREF="http://pike.idonex.se/">http://pike.idonex.se/</A>
<BR>
Idonex Home Page: <A HREF="http://www.idonex.se/">http://www.idonex.se/</A>
<BR>
Roxen Module Source: <A HREF="http://www.riverweb.com/source/">
http://www.riverweb.com/source/</A> <BR>
American Association for the Surgery of Trauma: <A
HREF="http://www.aast.org/">http://www.aast.org/</A> <BR>
<!--===================================================================-->
<P> <hr> <P>
<center><H5>Copyright &copy; 1998, Michael Pelletier <BR>
Published in Issue 31 of <i>Linux Gazette</i>, August 1998</H5></center>
<!--===================================================================-->
<P> <hr> <P>
<A HREF="./index.html"><IMG ALIGN=BOTTOM SRC="../gx/indexnew.gif"
ALT="[ TABLE OF CONTENTS ]"></A>
<A HREF="../index.html"><IMG ALIGN=BOTTOM SRC="../gx/homenew.gif"
ALT="[ FRONT PAGE ]"></A>
<A HREF="./pavlicek.html"><IMG SRC="../gx/back2.gif"
ALT=" Back "></A>
<A HREF="./hughes.html"><IMG SRC="../gx/fwd.gif" ALT=" Next "></A>
<P> <hr> <P>
<!--startcut ==========================================================-->
</BODY>
</HTML>
<!--endcut ============================================================-->