<HTML ><HEAD ><TITLE >Adding your first server</TITLE ><META NAME="GENERATOR" CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+ "><LINK REL="HOME" TITLE="Caudium HOWTO" HREF="index.html"><LINK REL="UP" TITLE="Creating your first server" HREF="creating.html"><LINK REL="PREVIOUS" TITLE="Configuration InterFace (CIF.)" HREF="cifconf.html"><LINK REL="NEXT" TITLE="Customizing your server" HREF="customizing.html"></HEAD ><BODY CLASS="sect1" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#840084" ALINK="#0000FF" ><DIV CLASS="NAVHEADER" ><TABLE SUMMARY="Header navigation table" WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TH COLSPAN="3" ALIGN="center" >Caudium HOWTO</TH ></TR ><TR ><TD WIDTH="10%" ALIGN="left" VALIGN="bottom" ><A HREF="cifconf.html" ACCESSKEY="P" >Prev</A ></TD ><TD WIDTH="80%" ALIGN="center" VALIGN="bottom" >Chapter 4. Creating your first server</TD ><TD WIDTH="10%" ALIGN="right" VALIGN="bottom" ><A HREF="customizing.html" ACCESSKEY="N" >Next</A ></TD ></TR ></TABLE ><HR ALIGN="LEFT" WIDTH="100%"></DIV ><DIV CLASS="sect1" ><H1 CLASS="sect1" ><A NAME="adding">4.7. Adding your first server</H1 ><P > In this section, I will give you a step-by-step tutorial on how to create your first site (virtual server) with Caudium. If you want to do something useful with Caudium, you have to create at least one virtual server. Without this first server, Caudium will not do anything. If you use your browser to access your server, you will only get a dialog box prompting for the <SPAN CLASS="abbrev" >CIF.</SPAN > login/password. </P ><DIV CLASS="note" ><P ></P ><TABLE CLASS="note" WIDTH="100%" BORDER="0" ><TR ><TD WIDTH="25" ALIGN="CENTER" VALIGN="TOP" ><IMG SRC="../images/note.gif" HSPACE="5" ALT="Note"></TD ><TD ALIGN="LEFT" VALIGN="TOP" ><P > A virtual server allows you to have several servers running on the same port. For example you can have www.foo.com and www.foo.org running on the same port and machine. This is why it is called virtual server. </P ></TD ></TR ></TABLE ></DIV ><P > To create your first server, log into the web based <SPAN CLASS="abbrev" >CIF.</SPAN >. Click on the <SPAN CLASS="guimenu" >Virtual Servers</SPAN > tab, then the <SPAN CLASS="guibutton" > <SPAN CLASS="inlinemediaobject" ><IMG SRC="images/new_virtual_server.png"></SPAN > </SPAN > button. </P ><P > Here, you are prompted for the server name: <DIV CLASS="mediaobject" ><P ><IMG SRC="images/cif_newserver.png"></P ></DIV > Type in an easily identifiable name. You also have to select the configuration type. Depending on the configuration you choose, your server will have a different set of modules. In other words, your server will have different capabilities. For your first server, choose <TT CLASS="option" >Basic server</TT >, and click <SPAN CLASS="guibutton" >OK</SPAN >. </P ><DIV CLASS="sect2" ><H2 CLASS="sect2" ><A NAME="servervariables">4.7.1. Server variables</H2 ><P > Now you'll see the Virtual Servers page again. As you can see, you have two different folders to work on: <SPAN CLASS="guisubmenu" >Server variables</SPAN > (<A HREF="adding.html#cif_ports" >Figure 4-1</A >) and <SPAN CLASS="guisubmenu" >File system</SPAN > (<A HREF="adding.html#cif_filesystem" >Figure 4-2</A >). <DIV CLASS="figure" ><A NAME="cif_ports"><P ><B >Figure 4-1. Ports in the CIF</B ></P ><DIV CLASS="mediaobject" ><P ><IMG SRC="images/cif_ports.png"></P ></DIV ></DIV > <DIV CLASS="figure" ><A NAME="cif_filesystem"><P ><B >Figure 4-2. Filesystem in the CIF</B ></P ><DIV CLASS="mediaobject" ><P ><IMG SRC="images/cif_filesystem.png"></P ></DIV ></DIV > Server variables contain the URL of your site, and the port on which it will be available. File system describes the files/directories containing the .html and other files you want Caudium to serve. </P ><P > In server variables, go into <SPAN CLASS="guisubmenu" >Listen ports</SPAN > and choose <SPAN CLASS="guibutton" >Configure a new port</SPAN >. Use the default values, choose <SPAN CLASS="guibutton" >Use these values</SPAN >, and click <SPAN CLASS="guibutton" > <SPAN CLASS="inlinemediaobject" ><IMG SRC="images/save.png"></SPAN > </SPAN >. Now select the URL of your site, and select <SPAN CLASS="guibutton" >Continue</SPAN >. You can now go back to the page displaying all of your modules, that is, where you were before you had gone into Server Variables. </P ><P > Under your server name, you'll see the status of your server. If it contains the word <SPAN CLASS="QUOTE" >"Open"</SPAN > in blue everything is okay, and you can continue with configuring the file system. </P ><P > If it contains the words <SPAN CLASS="QUOTE" >"Not open"</SPAN > in red, there is a problem. You can go into the Event Log via the <SPAN CLASS="abbrev" >CIF.</SPAN > tab to investigate. If you have an error <SPAN CLASS="guiicon" > <SPAN CLASS="inlinemediaobject" ><IMG SRC="images/err_3.png"></SPAN > </SPAN > <SPAN CLASS="errorname" >Failed to open socket on 0:80 (already bound ?)</SPAN >, you may have another program or Caudium itself already running on this port. To fix the problem, identify the program which is using this port, and restart Caudium <A NAME="AEN579" HREF="#FTN.AEN579" >[1]</A >. To restart Caudium, go into <SPAN CLASS="guimenu" >Action</SPAN >-><SPAN CLASS="guisubmenu" >Shutdown</SPAN >-><SPAN CLASS="guisubmenu" >Shutdown Caudium</SPAN >-><SPAN CLASS="guimenuitem" >Restart Caudium</SPAN >. Wait a few seconds, and when prompted, select <SPAN CLASS="guimenu" >Virtual Servers</SPAN >. Now select your server, and you should have the word <SPAN CLASS="QUOTE" >"Open"</SPAN > in blue. </P ><DIV CLASS="note" ><P ></P ><TABLE CLASS="note" WIDTH="100%" BORDER="0" ><TR ><TD WIDTH="25" ALIGN="CENTER" VALIGN="TOP" ><IMG SRC="../images/note.gif" HSPACE="5" ALT="Note"></TD ><TH ALIGN="LEFT" VALIGN="CENTER" ><B >In the <SPAN CLASS="abbrev" >CIF.</SPAN > you may wonder what are those two different protocols http and http2?</B ></TH ></TR ><TR ><TD > </TD ><TD ALIGN="LEFT" VALIGN="TOP" ><P > The difference is that http2 uses Caudium's internal memory cache while http is plain Pike http subsystem. So http2 is faster than http as you might expect. However, there are some issues on some specific sites. </P ></TD ></TR ></TABLE ></DIV ></DIV ><DIV CLASS="sect2" ><H2 CLASS="sect2" ><A NAME="selectingfs">4.7.2. Selecting file system</H2 ><P > By selecting a file system, you tell Caudium which files it will send to people browsing your site. For those who know other web servers, please pay close attention to these explanations, because Caudium is quite different from other servers in this respect. </P ><P > Caudium file systems use the Unix philosophy of mount point, rather than <TT CLASS="constant" >c:</TT >, <TT CLASS="constant" >d:</TT >, and so forth. The mount point concept allows you to put your files/directory under any URL you want without changing the files on your local file system. For example, assume you have the following local file system: </P ><DIV CLASS="example" ><A NAME="AEN605"><P ><B >Example 4-1. Your user filesystem.</B ></P ><TABLE BORDER="0" BGCOLOR="#E0E0E0" WIDTH="100%" ><TR ><TD ><FONT COLOR="#000000" ><PRE CLASS="programlisting" ><TT CLASS="computeroutput" > /home/customers/customer1 /home/customers/customer2 /home/customers/bigcustomer3 /home/friends/franck /home/friends/bertrand /home/friends/didier </TT ></PRE ></FONT ></TD ></TR ></TABLE ></DIV ><P > And suppose your URL is http://www.iteam.org/. </P ><P > With a default configuration, you would say that http://www.iteam.org points to /home/ so that you will have customer1 under http://www.iteam.org/customers/customer1, bertrand under http://www.iteam.org/friends/bertrand and bigcustomer3 under http://www.iteam.org/customers/bigcustomer3. </P ><P > But bigcustomer3 gives you a lot of money and he asks you for an URL such as http://www.iteam.org/bigcustomer3. However, he doesn't want to be moved from /home/customers/bigcustomer3 because of his FTP client's configuration. Moreover, you can't move the other accounts. With the mount point philosophy, you just have to create another mount point saying that /home/customers/bigcustomer3 is mounted on /bigcustomer3 so that when someone uses http://www.iteam.org/bigcustomer3, Caudium will serve them files from /home/customers/bigcustomer3. </P ><P > Now let's return to our setup. Go into the <TT CLASS="option" >File System</TT > module, and select <TT CLASS="option" >NONE/ mounted on /</TT > -> <TT CLASS="option" >Path</TT > -> <TT CLASS="option" >Search Path</TT >. Here you will decide which of your directories will be available when someone hits the root of your server. Write, for example, <TT CLASS="userinput" ><B >/home</B ></TT >. </P ><P > You can now launch your favorite browser to the URL of your site and enjoy. </P ><P > If you don't want visitors to get a listing of your files for security reasons, you can disable listing by setting <TT CLASS="option" >Directory Settings</TT > -> <TT CLASS="option" >Enable directory listing per default</TT > to <TT CLASS="option" >No</TT >. Next you have to hit the <TT CLASS="option" >More options</TT > button, and then reload the module. Don't forget to click <TT CLASS="option" >Save</TT >. It is possible to put one of two <SPAN CLASS="QUOTE" >"magic files"</SPAN > in any directory to make it browsable/not browsable despite the setting in the <SPAN CLASS="abbrev" >CIF.</SPAN > for that particular file system: </P ><TABLE BORDER="0" BGCOLOR="#E0E0E0" WIDTH="100%" ><TR ><TD ><FONT COLOR="#000000" ><PRE CLASS="programlisting" ><TT CLASS="computeroutput" > .www_browsable - the directory will always be browsable .www_not_browsable - the directory will never be browsable </TT ></PRE ></FONT ></TD ></TR ></TABLE ><P > Finally, to allow bigcustomer3 to get to his URL, go to <TT CLASS="option" >File System</TT > -> <TT CLASS="option" >Copy Module</TT >. Next, go to <TT CLASS="option" >Path</TT > -> <TT CLASS="option" >Search Path</TT > and type <TT CLASS="userinput" ><B >/home/customers/bigcustomer3</B ></TT >, then type <TT CLASS="userinput" ><B >/bigcustomer3</B ></TT > in <TT CLASS="option" >Mount point</TT >. </P ><P > The <A HREF="adding.html#cif_filesystem_example" >Figure 4-3</A > shows the output you should have. <DIV CLASS="figure" ><A NAME="cif_filesystem_example"><P ><B >Figure 4-3. Example of output</B ></P ><DIV CLASS="mediaobject" ><P ><IMG SRC="images/cif_filesystem_example.png"></P ></DIV ></DIV > </P ><DIV CLASS="note" ><P ></P ><TABLE CLASS="note" WIDTH="100%" BORDER="0" ><TR ><TD WIDTH="25" ALIGN="CENTER" VALIGN="TOP" ><IMG SRC="../images/note.gif" HSPACE="5" ALT="Note"></TD ><TD ALIGN="LEFT" VALIGN="TOP" ><P > If you created these files/directories after you point Caudium to your site, it is safe to go in the <TT CLASS="option" >Actions</TT > tab, then to <TT CLASS="option" >Cache</TT > -> <TT CLASS="option" >Cache status</TT > -> <TT CLASS="option" >Flush caches</TT >. </P ></TD ></TR ></TABLE ></DIV ></DIV ><DIV CLASS="sect2" ><H2 CLASS="sect2" ><A NAME="creatingavs">4.7.3. Creating a virtual server</H2 ><P > A web server is usually running on a single port and on a single IP address. So how can someone have different sites on this single port and single IP? The solution is to tell Caudium that the server is different based on the URL. This is the task of the Virtual Hosting module. As this module is not present in the Generic template we use, you will have to add it. Just use the <TT CLASS="option" >Add module</TT > button, and click the image named <SPAN CLASS="QUOTE" >"Virtual Host Matcher"</SPAN >. </P ><P > You are now able to do redirection with the help of regular expressions. If you don't know what regular expressions (<SPAN CLASS="QUOTE" >"regexp"</SPAN > for short) are, check the man page for regexp, see Pike/Perl manual, or maybe buy a book on regular expressions. To write these redirections based on the URL, go into <TT CLASS="option" >Regular expression rewrite rules</TT > and add the following rule: </P ><DIV CLASS="example" ><A NAME="AEN660"><P ><B >Example 4-2. A simple virtual hosting regular expression.</B ></P ><TABLE BORDER="0" BGCOLOR="#E0E0E0" WIDTH="100%" ><TR ><TD ><FONT COLOR="#000000" ><PRE CLASS="programlisting" ><TT CLASS="computeroutput" > www\.virtualhost\.com www.virtualhost.com </TT ></PRE ></FONT ></TD ></TR ></TABLE ></DIV ><DIV CLASS="example" ><A NAME="AEN664"><P ><B >Example 4-3. A better and quicker regular expression.</B ></P ><TABLE BORDER="0" BGCOLOR="#E0E0E0" WIDTH="100%" ><TR ><TD ><FONT COLOR="#000000" ><PRE CLASS="programlisting" ><TT CLASS="computeroutput" > ^www\.virtualhost\.com$|^virtualhost\.com$ www.virtualhost.com </TT ></PRE ></FONT ></TD ></TR ></TABLE ></DIV ><P > Save and type this command on your command line in order to get your browser resolving www.virtualhost.com: </P ><TABLE BORDER="0" BGCOLOR="#E0E0E0" WIDTH="100%" ><TR ><TD ><FONT COLOR="#000000" ><PRE CLASS="programlisting" ><TT CLASS="computeroutput" > # echo "127.0.0.1 www.virtualhost.com" >> /etc/hosts. </TT ></PRE ></FONT ></TD ></TR ></TABLE ><P > You now have to add another virtual server with the button <TT CLASS="option" >New Virtual Server</TT > at the root of the virtual server tab. Put <TT CLASS="userinput" ><B >Virtual host</B ></TT > as the server name and choose the <TT CLASS="option" >Generic server</TT > configuration type. Go into <TT CLASS="option" >Server variables</TT > -> <TT CLASS="option" >Server URL</TT > and type <TT CLASS="userinput" ><B >http://www.virtualhost.com/</B ></TT >. You should see: </P ><P > This server is handled by the port in my first virtual server. Server URL: http://www.virtualhost.com/ </P ><P > Change the file system root and /tmp in <TT CLASS="option" >File system</TT > -> <TT CLASS="option" >NONE/ mounted on /</TT > -> <TT CLASS="option" >Paths</TT > -> <TT CLASS="option" >Search path</TT >. </P ><P > You can now point your favorite browser to http://localhost/ and http://www.virtualhost.com/ and see the result. </P ><P > If you have an error telling you www.virtualhost.com is unknown check your host file. </P ><P > For more information about virtual hosting, see the Virtual-Web Mini-HOWTO available at the <A HREF="http://www.tldp.org/" TARGET="_top" >LDP</A > or in <TT CLASS="computeroutput" >/usr/share/doc/HOWTO</TT > or <TT CLASS="computeroutput" >/usr/doc/HOWTO</TT > under Debian GNU/Linux. </P ></DIV ></DIV ><H3 CLASS="FOOTNOTES" >Notes</H3 ><TABLE BORDER="0" CLASS="FOOTNOTES" WIDTH="100%" ><TR ><TD ALIGN="LEFT" VALIGN="TOP" WIDTH="5%" ><A NAME="FTN.AEN579" HREF="adding.html#AEN579" >[1]</A ></TD ><TD ALIGN="LEFT" VALIGN="TOP" WIDTH="95%" ><P > To identify you can use lsof(8). If you want to know which programs listen on port 80 just issue the following command as root<DIV CLASS="note" ><P ></P ><TABLE CLASS="note" WIDTH="100%" BORDER="0" ><TR ><TD WIDTH="25" ALIGN="CENTER" VALIGN="TOP" ><IMG SRC="../images/note.gif" HSPACE="5" ALT="Note"></TD ><TD ALIGN="LEFT" VALIGN="TOP" ><P >You need to be root if lsof has been compiled with the HASSECURITY option which is the default for some GNU/Linux distributions</P ></TD ></TR ></TABLE ></DIV >: </P ><TABLE BORDER="0" BGCOLOR="#E0E0E0" WIDTH="100%" ><TR ><TD ><FONT COLOR="#000000" ><PRE CLASS="programlisting" ><TT CLASS="computeroutput" > # lsof -i TCP:80 </TT ></PRE ></FONT ></TD ></TR ></TABLE ><P > Here is the result: </P ><TABLE BORDER="0" BGCOLOR="#E0E0E0" WIDTH="100%" ><TR ><TD ><FONT COLOR="#000000" ><PRE CLASS="programlisting" ><TT CLASS="computeroutput" > COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME caudium 1001 root 12u IPv4 3993 TCP *:www (LISTEN) </TT ></PRE ></FONT ></TD ></TR ></TABLE ></TD ></TR ></TABLE ><DIV CLASS="NAVFOOTER" ><HR ALIGN="LEFT" WIDTH="100%"><TABLE SUMMARY="Footer navigation table" WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" ><A HREF="cifconf.html" ACCESSKEY="P" >Prev</A ></TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" ><A HREF="index.html" ACCESSKEY="H" >Home</A ></TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" ><A HREF="customizing.html" ACCESSKEY="N" >Next</A ></TD ></TR ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" >Configuration InterFace (<SPAN CLASS="abbrev" >CIF.</SPAN >)</TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" ><A HREF="creating.html" ACCESSKEY="U" >Up</A ></TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" >Customizing your server</TD ></TR ></TABLE ></DIV ></BODY ></HTML >