Title: Meeting 3: Advanced Apache Topics
1Meeting 3 Advanced Apache Topics
- Rutgers University Internet Institute
- Instructor Chris Uriarte
- (non IPVH exc)
2Virtual 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.
3Options 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
browsersNetscape 2.0/IE 3.0)
4Virtual 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
www.yahoo.com
216.32.74.52
NIC
216.115.105.243
sports.yahoo.com
5Virtual 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
some.mydomain.com
165.145.26.110
NIC
www.hisdomain.com
6Setting-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.
7Setting-Up IP-Based Virtual Hosting, Cont.
- You need to have DNS properly configured for your
domains, e.g. The world needs to know that
www.yourdomain.com is at the IP address
123.23.34.56. - Remember, your ISP can usually provide DNS
service for your domains.
8IP-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 interfaceltsub-numbergt IP
- e.g ifconfig eth00 165.230.30.71
- ifconfig eth01 165.230.30.72
- WinNT IP setup through Network control panel.
9Configuring Apache for IP-Based Virtual Hosting
- Configuring Apache for Virtual Hosting is quite
simple Simply add a ltVirtualHostgt block within
the httpd.conf file. - Format
- ltVirtualHost IP-or-HOSTNAMEPortgt
- Any Valid httpd.conf directives
- lt/VirtualHostgt
- Required for each Virtual Host website your are
usingtherefore your httpd.conf can have multiple
ltVirtualHostgt blocks.
10IP-Based VH Configuration cont.
- Typical ltVirtualHostgt block in httpd.conf
- ltVirtualHost www.bearsnest.orggt
- DocumentRoot /home/www/bearsnest/htdocs
- ServerAdmin chrisjur_at_cju.com
- ServerName www.bearsnest.org
- ErrorLog logs/bears-error_log
- TransferLog logs/bears-access_log
- Redirect /adprotech http//www.adprotech.com
- Alias /staff /home/chrisjur/htdocs/bn/staff
- lt/VirtualHostgt
- The key Vitual hosts will have their own unique
DocumentRoot different content for different
sties.
11Steps 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 ltYour IP Addressgt
- Which tells Apache the single IP address you will
use for all your websites. - Now simply add ltVirtualHostgt blocks for each of
your website domains.
12Name-Based VH Examples
- NameVirtualHost 165.230.30.68
- ltVirtualHost www.yoursite.orggt
- DocumentRoot /home/www/yoursite/htdocs
- ServerAdmin you_at_yoursite.com
- ServerName www.yoursite.com
- ErrorLog logs/yoursite-error_log
- lt/VirtualHostgt
- ltVirtualHost www.mysite.comgt
- DocumentRoot /home/www/mysite/htdocs
- ServerAdmin me_at_mysite.com
- ServerName www.mysite.org
- ErrorLog logs/mysite-error_log
- lt/VirtualHostgt
13Virtual 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 ltVirtualHostgt blocks to your httpd.conf
14Delivering 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 clients system. - Examples JavaScript, Java Applets, client-side
image maps. - Web server administrator needs to see that MIME
types are set correctly.
15Dynamic Content, cont.
- 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.
16Server-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.
17Enabling Server Side Includes, cont
- 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 SSIs.
18Server-Side Includes Examples
- The general form of the SSI directive is
lt!--command parametervalue--gt For example - lt!include fileinclude.html--gt
- Will insert the contents of the file file
include.html when displayed in the clients
browser. - lt!echo varLAST_MODIFIED--gt
- Prints the last time your HTML file was modified.
19Server Side Includes, cont.
- 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 http//iti.rutgers.edu/chrisjur/ssi.sht
ml for an example ( source file is
/home/chrisjur/public_hthml/ssi.html on
iti.rutgers.edu server)
20 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.
21Enabling 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 ltother optionsgt
- SetHandler cgi-script
- To enable files with only specific extensions as
CGI scripts use AddHandler instead of - SetHandler AddHandler cgi-script .cgi
22Enabling CGI Example 1
- Sometimes its convenient to have one
centrialized cgi-bin directory where all CGI
programs are kept. - You can access all the scripts through
http//www.domain.com/cgi-bin/scriptname - To do this at the following line to httpd.conf
- ScriptAlias /cgi-bin /home/itiXXXX/apache/cgi-bin
/
23Enabling 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 - ltDirectory /home/user/htdocsgt
- Options ExecCGI (other options)
- SetHandler cgi-script
- lt/Directorygt
24Limiting 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)
25CGI Examples
- http//iti.rutgers.edu/chrisjur/cgi-bin/test.cgi
- CGI script written in Perl, simply outputs
current time and the end-users browser type
(source at /home/chrisjur/public_html/cgi-bin/test
.cgi) - http//iti.rutgers.edu/chrisjur/cgi-bin/shell.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/shel
l.cgi)
26More CGI Examples
- http//iti.rutgers.edu/chrisjur/feedback.html -
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.
27Exercise 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 ax test.cgi) - Access the script via http//iti.rutgers.eduYourP
ort/cgi-bin/test.cgi