are available here
Upcoming SlideShare
Loading in...5

are available here






Total Views
Views on SlideShare
Embed Views



0 Embeds 0

No embeds



Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
Post Comment
Edit your comment

are available here are available here Presentation Transcript

  • Meeting 3: Advanced Apache Topics Rutgers University Internet Institute Instructor: Chris Uriarte (non IPVH exc)
  • Virtual Hosting
    • General term used when you run more than one website on a single system.
    • Allows ISPs and hosting providers to make money by sharing resources among clients. Allows companies and individuals to save time and money - a single machine can host many websites.
  • Options for Hosting More than One Website on a Single System
    • Run separate instances of httpd servers: httpd –f /usr/local/apache/conf/httpd-virtual.conf
    • Run a server that will listen on multiple ports and serve different content depending on the port.
    • True Virtual Hosting - Allows multiple IP address and/or host names to be served through a single Apache server.
      • IP-Based
      • Name-Based (not supported by very early Web browsers…Netscape 2.0/IE 3.0)
  • Virtual Hosting: IP Based
    • You must configure your machine to “listen” for multiple IP addresses. One NIC binds to multiple IP addresses
    • One hostname is associated with each IP address SERVER NIC
  • Virtual Hosting: Name Based
    • A machine can host multiple websites using only 1 IP address
    • All hostnames have the same IP address
    • Becoming more and more popular. SERVER NIC
  • Setting-Up IP-Based Virtual Hosting: An Overview
    • Once you have secured the domain names/hostnames you want to use for your website, you need to assign each of them a unique IP address.
    • Some ISPs can assign you additional IP addresses.
    • Blocks of IP addresses are usually assigned with business T1s or DSL lines.
  • Setting-Up IP-Based Virtual Hosting, Con’t.
    • You need to have DNS properly configured for your domains, e.g. The world needs to know that is at the IP address
    • Remember, your ISP can usually provide DNS service for your domains.
  • IP-Based Virtual Hosting: Setting Up Your Machine
    • Your web server needs to be configured to listen for the IP addresses related to your websites:
    • UNIX-based OSs allow you to configure multiple IP addresses using the ifconfig command (must be run as root)
    • Usage: ifconfig interface:<sub-number> IP
      • e.g: ifconfig eth0:0
      • ifconfig eth0:1
    • WinNT IP setup through Network control panel.
  • Configuring Apache for IP-Based Virtual Hosting
    • Configuring Apache for Virtual Hosting is quite simple: Simply add a <VirtualHost> block within the httpd.conf file.
    • Format:
      • <VirtualHost IP-or-HOSTNAME:Port>
      • #Any Valid httpd.conf directives
      • </VirtualHost>
    • Required for each Virtual Host website your are using…therefore your httpd.conf can have multiple <VirtualHost> blocks.
  • IP-Based VH Configuration con’t.
    • Typical <VirtualHost> block in httpd.conf:
    • <VirtualHost>
    • DocumentRoot /home/www/bearsnest/htdocs
    • ServerAdmin
    • ServerName
    • ErrorLog logs/bears-error_log
    • TransferLog logs/bears-access_log
    • Redirect /adprotech
    • Alias /staff /home/chrisjur/htdocs/bn/staff
    • </VirtualHost>
    • The key: Vitual hosts will have their own unique DocumentRoot – different content for different sties.
  • Steps for Setting-Up Name-Based Virtual Hosting
    • When setting up Name-based virtual hosts, you need to add the special NameVirtialHost Directive to your httpd.conf:
      • NameVirtualHost <Your IP Address>
    • Which tells Apache the single IP address you will use for all your websites.
    • Now simply add <VirtualHost> blocks for each of your website domains.
  • Name-Based VH Examples
    • NameVirtualHost
    • <VirtualHost>
    • DocumentRoot /home/www/yoursite/htdocs
    • ServerAdmin
    • ServerName
    • ErrorLog logs/yoursite-error_log
    • </VirtualHost>
    • <VirtualHost>
    • DocumentRoot /home/www/mysite/htdocs
    • ServerAdmin
    • ServerName
    • ErrorLog logs/mysite-error_log
    • </VirtualHost>
  • Virtual Hosting Recap
    • Get your DNS configured for each domain
    • IP-based Virtual Hosting vs. Name-based Virtual Hosting
    • Configure your server for multiple IP addresses if using IP-based Virtual Hosting
    • Create new directories for new Document Roots
    • Add <VirtualHost> blocks to your httpd.conf
  • Delivering Dynamic Content
    • Two ways of delivering dynamic content for the Web: client-side or server-side technologies
    • Client-Side
      • Elements are downloaded to the browser and execute on the client’s system.
      • Examples: JavaScript, Java Applets, client-side image maps.
      • Web server administrator needs to see that MIME types are set correctly.
  • Dynamic Content, con’t.
    • Server-Side
      • Server processes “on-the-fly” content that is passed to client browser.
      • Examples: server-side includes, CGI (Common Gateway Interface), server-side image maps, ASP (Active Server Pages), Java Servlets. PHP
      • Server-side technologies generally require additional configuration of the Web server in order to function properly. Usually require specific Apache modules.
      • Enabling server-side technologies generally has security implications.
  • Server-Side Includes
    • Server-side includes are directives that can be placed in HTML documents to execute other programs or to output data.
    • Requires mod_include.
    • To enable SSI, make the following modifications to httpd.conf:
      • Options Includes (or IncludesNOEXEC)
    • The options directive only works within a specific Directory or VirtualHost container.
  • Enabling Server Side Includes, con’t…
    • To tell Apache how to interpret SSI documents, add the following to httpd.conf:
      • AddType text/html .shtml
      • AddHandler server-parsed .shtml
    • These lines are usually commented out by default, so you just need to uncomment them.
    • All files with indicated extension(s) will be parsed by Apache server prior to being transmitted to the client, e.g. web page files that end with .shtml can contain SSI’s.
  • Server-Side Includes Examples
    • The general form of the SSI directive is: <!--#command parameter=“value”--> For example:
      • <!—include file=“include.html”-->
      • Will insert the contents of the file file “include.html” when displayed in the client’s browser.
      • <!—echo var=“LAST_MODIFIED”-->
      • Prints the last time your HTML file was modified.
  • Server Side Includes, con’t.
    • The Server Side Include in the .html file is evaluated by Apache and the output is displayed to the client.
    • See Appendix E in Professional Apache for a guide to includes that Apache understands.
    • Check out for an example ( source file is /home/chrisjur/public_hthml/ssi.html on server)
  • CGI
    • CGI (Common Gateway Interface) is a protocol for getting, processing, and returning information through Web pages.
    • CGI programs or scripts can be written in a variety of languages including Perl, Python, VB Script, JavaScript, and C.
    • CGI scripts are generally triggered by data supplied by the client.
  • Enabling CGI
    • There are two ways to enable Apache to recognize CGI scripts:
      • To allow CGI scripts in one system-wide directory outside of the document root (All CGI programs must be placed in one directory):
        • ScriptAlias /cgi-bin “/home/itiXXXX/apache/cgi-bin/”
      • Within a container:
        • Options ExecCGI <other options>
        • SetHandler cgi-script
      • To enable files with only specific extensions as CGI scripts use AddHandler instead of
        • SetHandler: AddHandler cgi-script .cgi
  • Enabling CGI: Example 1
    • Sometimes it’s convenient to have one centrialized “cgi-bin” directory where all CGI programs are kept.
    • You can access all the scripts through
    • To do this at the following line to httpd.conf:
    • ScriptAlias /cgi-bin “/home/itiXXXX/apache/cgi-bin/”
  • Enabling CGI: Example 2
    • You can enable CGI scripts to be placed in any directory by specifying some CGI directives in a directory container within the httpd.conf or an .htaccess file. This allows CGI execution in the directory specified:
    • <Directory /home/user/htdocs>
    • Options ExecCGI (other options…)
    • SetHandler cgi-script
    • </Directory>
  • Limiting CGI Access
    • If you do not have Options ExecCGI or a ScriptAlias directive, the execution of CGI programs will be denied.
    • You can limit CGI access to only programs that end with a specific extension:
      • SetHandler: AddHandler cgi-script .cgi
    • (limits CGI execution to programs that only end in .cgi)
  • CGI: Examples
    • - CGI script written in Perl, simply outputs current time and the end-user’s browser type (source at /home/chrisjur/public_html/cgi-bin/test.cgi)
    • - Written as a shell script in, prints current date/time and lists files in its directories (source at /home/chrisjur/public_html/cgi-bin/shell.cgi)
  • More CGI Examples…
    • - More traditional example of what CGI is used for. An HTML form posts to a CGI script written in Perl (/home/chrisjur/public_html/cgi-bin/feedback.cgi) which emails form contents to a recipient and performs some validation logic.
  • Exercise: Enabling CGI
    • Enable CGI via the ScriptAlias directive in your httpd.conf. Specify a cgi-bin directory to place all your CGI scripts.
    • Copy /home/chrisjur/test.cgi script to your cgi-bin directory. Make the test.cgi script executeable (chmod a+x test.cgi)
    • Access the script via