Rabu, 13 November 2013

Web Server ( Apache HTTP server )


Tujuan:

·       Mengetahui dan memahami konsep web 
·       Mampu membangun web server  dengan Apache
·       Mengerti dan memahami konfigurasi web server Apache

3.1. Apa itu web ?

Web adalah salah satu layanan internet yang paling populer diantara layanan internet lainnya (mail, ftp, messenger, chat dll). Web sebenarnya hanyalah suatu file atau dokumen dengan format HTML




                                                Gambar-1. HTTP Client-Server
(Hyper Text Mark up Language) yang ditransfer dari suatu komputer yang menyediakan file -file web tersebut ke komputer client yang meminta. Web bekerja dalam konsep client – server, artinya ada aplikasi client yang meminta dokumen web kepada web server (yang menyediakan dokumen web). Aplikasi web client contohnya: Mozilla, Firefox, Netscape, Internet Explorer, Opera dll. Sedangkan contoh aplikasi web server yaitu: Apache web server, thttpd, IIS (Microsoft web server) dll.
 Web client dan web server berkomunikasi menggunakan protokol HTTP (Hyper Text Transfer Protocol). Protokol HTTP merupakan protokol TCP/IP yang bekerja pada 'Application layer', bertanggungjawab dalam proses transfer file-file Hyper Text.

3.2. Apache HTTP server


Apache HTTP Server adalah sebuah aplikasi web server yang 'robust', 'open source' yang dikembangkan oleh Apache Software Foundation (http://www.apache.org). Sebagian besar web server di internet saat ini menggunakan Apache sebagai aplikasi web servernya, pada september 2005 berdasarkan survey pada www.netcraft.com  hampir 70% web server di dunia(internet) menggunakan Apache HTTP server.  Sebagian besar distribusi linux menyertakan Apache sebagai default  aplikasi web server.
Apache adalah web server dengan lisensi GPL. Artinya boleh digunakan oleh siapapun baik untuk keperluan komersial maupun non-komersial. Kita juga bisa mendapatkan kode sumber dari web server ini. Oleh sebab itu sering disebut juga dengan program open source.

3.3. Instalasi Apache


Jika pada saat instalasi linux Anda belum memilih paket Apache HTTP server untuk diinstal pada saat instalasi, maka sekaranglah saatnya Anda menginstal apache. Apache yang tersedia di www.apache.org biasanya dalam kemasan tarball (tar.gz atau tar.bz2), namun untuk kemudahan maka sebaiknya Anda cukup menginstal apache  dalam kemasan rpm yang sudah tersedia di CD distribusi linux yang Anda miliki (misal Fedora).

# mount /mnt/cdrom
# rpm -ivh /mnt/cdrom/Fedora/RPMS/httpd-x-x.x.i386.rpm
catatan:
x-x.x adalah versi apache yang digunakan, sesuaikan dengan yang ada pada CD linux Fedora  Anda, nama paket apache dalam distribusi linux yang lain bisa jadi bukan httpd tetapi apache. Dan pada contoh perintah diatas  lokasi file source apache diasumsikan pada  current directory.

Setelah terinstal, Apache secara default telah membuatkan file konfigurasi default yang sudah dapat digunakan, file konfigurasi tersebut terletak di /etc/httpd/conf/httpd.conf. Untuk itu Anda dapat mengaktifkan apache web server dengan perintah sbb (Fedora, Mandrake):

# service httpd start
atau
# /etc/init.d/httpd start

Selanjutnya Anda dapat memastikan apakah service web benar-benar sudah berjalan, gunakanlah perintah berikut ini:
# netstat -tanp |grep :80
tcp  0    0 0.0.0:80    0.0.0.0:*             LISTEN      2076/httpd

Jika perintah 'netstat -tanp |grep :80' tersebut ada output seperti diatas maka web server sudah jalan dan siap menerima request dari client. Cobalah Anda gunakan web browser (misal mozilla) lalu ketiklah pada bar address http://localhost. Maka akan muncul welcome page.

3.4. Konfigurasi Apache

Sebagaimana telah disebutkan sebelumnya bahwa dengan default konfigurasi Apache web server sudah berfungsi, dan jika diperlukan konfigurasi ulang (merubah konfigurasi), Anda cukup mengedit file konfigurasi Apache yaitu file  /etc/httpd/conf/httpd.conf.   Untuk itu Anda harus memahami terlebih dahulu beberapa parameter(directive) konfigurasi Apache yang penting dan umum. File konfigurasi apache biasanya di dalamnya menyertakan guide atau keterangan yang menjelaskan fungsi dari masing-masing parameter yang ada pada file konfigurasi apache.

Global Environment

ServerType
Apache bisa dijalankan dengan dua cara, yaitu sebagai server yang berjalan sendiri atau dijalankan oleh program lain, yang sering disebut dengan super server. Nilai yang mungkin untuk direktif ini adalah inetd dan standalone.

ServerRoot
Direktif ini dipakai untuk menentukan top level direktori tree dari file-file konfigurasi, log, dan error log. Direktif ini sudah dicontohkan di depan.

PidFile
Untuk menentukan file yang dipakai untuk menyimpan proses ID dari server induk.

Timeout
Waktu tunggu maksimal dalam detik yang diperbolehkan, baik untuk mengirim atau menerima permintaan ke server.

KeepAlive, MaxKeepAliveRequests, dan KeepAliveTimeout
Ketiga direktif ini berhubungan dengan "persistent connections". Jika KeepAlive bernilai On maka server memberi kesempatan untuk menjaga presistensi koneksi dari klient ke server. Nilai lain yang mungkin untuk direktif ini adalah Off. Yang dimaksud dengan persistensi adalah klien yang sama akan dilayani oleh proses anak yang sama dari Apache server. Jadi disini ada mekanisme mengingat koneksi.
MaxKeepAliveRequests menentukan jumlah koneksi maksimum yang diperbolehkan saat terjadi koneksi persisten. Anda bisa memberikan nilai 0 agar jumlah koneksi tidak dibatasi.
Waktu tunggu maksimum sebuah koneksi masih bisa dilayani dengan cara koneksi persisten. Satuannya adalah detik.

MinSpareServers, MaxSpareServers, dan StartServers
Saat pertama server dijalankan proses induk akan membuat proses anak sebanyak yang disebutkan dalam direktif StartServers. Proses anak akan terus diawasi agar tidak kurang dari MinSpareServers dan tidak lebih dari MaxSpareServers.

MaxClients
Membatasi jumlah klien yang dilayani secara bersamaan.

MaxRequestsPerChild
Setiap proses anak diperbolehkan melayani paling banyak sejumlah MaxRequestsPerChild sebelum mati. Sebagai catatan, dalam proses koneksi persisten dianggap satu koneksi. Nilai 0 dipakai untuk mewakili jumlah tak terbatas.

Listen dan BindAddress
Akan menentukan dimana server Apache melayani permintaan. Contoh:
Listen 8080
Listen 192.168.1.192:80

Artinya apache akan melayani permintaan dari port 8080 dan dari nomor IP 192.168.1.192 pada port 80. Direktif ini sangat bermanfaat untuk membuat virtual host bila server Anda mempunyai beberapa nomor IP yang bisa dipakai.
BindAddress berfungsi sama dengan Listen akan tetapi disini hanya bisa dipakai nomor IP dan nama host saja.

Direktif Main server


User dan Group
User dan Group yang akan dipakai untuk menjalankan server Apache.

ServerAdmin dan ServerName
ServerAdmin berisi alamat email dari administrator web server. Sedangkan ServerName berisi menentukan nama host dari server utama.
Contoh:
ServerAdmin root@your-server.com
ServerName www. your-server.com

DocumentRoot
Root direktori dari dokumen-dokumen html. Contoh:
DocumentRoot "/var/www/html"
Jika kita mengakses url http://www.your-server.com/utama.html, sama dengan mengakses file /var/www/html/utama.html.

 

Directory  

Tag-tag <Directory /path/to/directory> dan </Directory>  mendefinisikan ijin akses, directive-directive dan option-option yang akan diterapkan pada  suatu direktori. 
Secara default , root directory ( / ) dibatasi ijin aksesnya oleh apache (untuk keamanan)  dengan hanya  menggunakan directive  Options  dan  AllowOverride .  Untuk root directory directive option hanya mengenable fitur FollowSymLinks dan directive AllowOverride di set None.
<Directory />
    Options FollowSymLinks
    AllowOverride None
</Directory>

 

Modul

Apache  banyak mendukung modul-modul. Modul dalam apache diterapkan dengan  konsep Dynamic Shared Object (DSO) agar mudah dikembangkan. Modul semacam php, python, perl, mod rewrite dan lain-lainnya dikembangkan dengan konsep ini, sehingga mempermudah pengembangan dan pemeliharaan masing-masing modul.
Untuk mengetahui modul apa saja yang dikompilasi dalam server http.
# /usr/sbin/httpd -l
Compiled-in modules:
  core.c
  prefork.c
  http_core.c
  mod_so.c
  suexec: enabled; valid wrapper /usr/sbin/suexec

Agar bisa memanfaatkan modul-modul dalam bentuk shared-object, modul mod_so harus dikompilasi kedalam apache. Jika hasil dari perintah httpd -l tidak terdapat modul mod_so. Maka apache harus kita kompilasi ulang dengan memasukkan modul ini.
Untuk memuat modul DSO tersebut saat apache berjalan maka Anda perlu mnambhakan pada file httpd.conf suatu bari dengan directive  LoadModule.
LoadModule <module-name> <path/to/module.so>
contoh: memuat modul php pada apache saat runtime.
LoadModule php4_module modules/libphp4.so

Direktori HTML User linux (UserDir)

Apache memungkinkan dapat membaca dokumen-dokumen html milik user sistem linux yang tersimpan dalam home directory user. Sehingga setiap user linux dapat memiliki web pribadi. Ini dapat dilakukan dengan mendefinisikan lokasi direktori web milik user dalam file konfigurasi apache dengan menggunakan directive UserDir.
Secara default dalam konfigurasi Apache directive UserDir masih disable. Untuk itu rubahlah sehingga seperti berikut ini.
<IfModule mod_userdir.c>
   UserDir public_html
</IfModule>

Kemudian beri ijin akses pada direktori public_html tersebut yang nantinya direktori  public_html berada didalam setiap home directory user, sbb:

<Directory /home/*/public_html>
      AllowOverride FileInfo AuthConfig Limit
      Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
      <Limit GET POST OPTIONS>
            Order allow,deny
            Allow from all
      </Limit>
      <LimitExcept GET POST OPTIONS>
            Order deny,allow
            Deny from all
      </LimitExcept>
</Directory>

Jangan lupa jika Anda merubah konfigurasi apache , kemudian service httpd nya harus di restart.
Agar setiap user sistem linux nantinya secara default memiliki direktori public_html sebagai direktori tempat menyimpan dokumen-dokumen web(html) nya, maka buatlah template direktori public_html pada direktori /etc/skel, sbb:
# mkdir /etc/skel/public_html

Selanjutnya, cobalah buat user baru sbb:
#adduser juanda

kemudian agar home directory user akhtar dapat diakses oleh user yang menjalankan service httpd (Apache) maka jangan lupa merubah atribut ijin akses home directory user menjadi minimal 711 (rwx—x—x), sbb:
#chmod 711 /home/juanda
Berikutnya cobalah Anda buat file html sederhana dengan nama index.html pada direktori /home/akhtar/public_html, sbb:
# echo “<h1> Web Juanda</h1>” > /home/juanda/public_html/index.html
# chown juanda.juanda /home/akhtar/public_html/index.html
Dan akhirnya user akhtar memiliki web site pribadi dengan alamat web site http://your-server-name/~juanda/  atau http://your-IP-address/~juanda/

Virtual Hosts

Virtual Host adalah fitur apache yang bisa dimanfaatkan untuk membuat web hosting dengan satu mesin tetapi melayani servername (domain) yang banyak. Virtual Hosts dapat berbasiskan IP atau server name. Namun umumnya konfigurasi virtual host menggunakan tipe berbasiskan server name. 
Untuk dapat memanfaatkan Virtual Hosts, pertama Anda harus mendefinisikan dulu pada IP address yang manakah diterapkan virtual host berbasiskan server name, ini artinya seluruh server name dari masing-masing virtual host tentunya pada DNS server yang bersangkutan  harus di petakan atau di mapping ke IP address tersebut. minimal satu. Contoh :

NameVirtualHost 192.168.1.1
Contoh konfigurasi 2 buah  Virtual Hosts dapat dilihat sebagai berikut :

<VirtualHost 192.168.1.1>
      ServerAdmin webmaster@domain-utama-anda.com
      DocumentRoot /var/www/html
      ServerName www.domain-utama-anda.com
</VirtualHost>

<VirtualHost 192.168.1.1>
      ServerAdmin webmaster@domain-anda-lainnya.net
      DocumentRoot /home/anda/public_html
      ServerName www.domain-anda-lainnya.net 
</VirtualHost>

Direktori DocumentRoot /var/www/html sudah ada (karena merupakan  default DocumentRoot) dan jangan lupa /home/anda/public_html harus sudah ada maka  buatlah direktori tersebut dengan cara membuat dahulu user “anda”, maka otomatis akan dibuatkan direktori public_html dalam home direktori user “anda” (diasumsikan sudah ada template direktori public_html dalam direktori /etc/skel), sbb:
# adduser anda
# chmod 711 /home/anda
# echo “<h2>tes domain-anda</h2>” > /home/anda/public_html/index.html
# chown anda.anda /home/anda/public_html/index.html


3.5.  Modul Authentication

Apache web server mendukung beberapa modul-modul authentication, modul-modul ini umumnya digunakan untuk menyediakan proses autentikasi yang dapat dterapkan dalam direktori-direktori document root atau dokumen web, apache akan melakukan verifikasi user yang mencoba mengakses direktori web. Informasi Account dapat disimpan dalam file text , file database, atau kedalam database server. Dalam buku ini kita hanya akan membahas Autentikasi yang mana informasi user account nya tersimpan dalam file text biasa dan dalam file database (dbm)  .
Untuk menyediakan proses autentikasi dapat kita terapkan dengan 2 cara , yang pertama dengan mendefinisikan parameter-parameter autentikasi dalam section direktori yang akan kita berikan proses autentikasi, dengan menuliskannya dalam file konfigurasi htpd.conf. Atau cara yang kedua menggunakan file htaccess. Untuk itu mari kita lihat beberap contoh yang akan menggambrkan kedua cara tersebut.
Cara pertama:
Tambahkan baris berikut ini kedalam file konfigurasi apache (httpd.conf) , sebagai contoh Anda akan memproteksi direktori DocumentRoot (/var/www/html), maka pada section directory /var/www/html yang ditandai dengan tanda “<Directory /var/www/html>”, sbb:

 AuthType Basic
 AuthName "Restricted Files"
 AuthUserFile /etc/httpd/passwd
 require valid-user

Kemudian buatlah File database text, dengan menggunakan tool htpasswd sbb:
htpasswd -c /etc/httpd/passwd henry
htpasswd /etc/httpd/passwd akhtar
 dan hasilnya akan dibutlah sebuah file database text yang berisi username dan password dengan lokasi di /etc/httpd, dan isi file sbb;
henry:KDp4desIpaOc.
akhtar:RedYva8skPWPY

Kemudian restart apache web servernya  agar proses proteksi diterapkan. Kalau kita lihat file database diatas masih dapat dibaca karena masih dalam bentuk File ASCII text biasa, sebenarnya anda dapat juga menggunakan tool htdbm yang bisa digunakan untuk menghasilkan file database yang sulit dibaca user. Untuk menggunakan file database htdbm maka baris yang perlu ditambahkan kedalam file konfigurasi apache (httpd.conf) sebenarnya sama seperti kita menggunakan file database ascii text perbedaanya hanya pada tipe Auth user filenya. Lihat bars berikut ini:

 AuthType Basic
AuthName "Restricted Files"
AuthDBMUserFile /etc/httpd/passwdbm
AuthDBMType DB
require valid-user

Selanjutnya buatlah File database , dengan menggunakan tool htdbm sbb:
 htdbm  -TDB -c /etc/httpd/passwdbm henry
 htdbm  -TDB /etc/httpd/passwdbm akhtar

hasilnya terdapat sebuah file database dengan tipe Barkeley Hash Database di /etc/httpd dengan nama file passwdbm. Jangan lupa selanjutnya  restart apache web servernya  agar proses proteksi diterapkan.

Cara kedua:

Cara yang kedua dalam menerapkan autentikasi yaitu dengan menggunakan htaccess file, dimana kita bisa saja menerapkan autentikasi  tidak harus mendefinisikan parameter autentikasi kedalam file konfigurasi utama apache (httpd.conf) . Untuk menerapkan cara ini kita perlu memmastikan dalam file konfigurasi apache terdapat parameter “AccessFileName” dan parameter ini memiliki nilai sbb:

AccessFileName .htaccess
Kemudian Anda harus memastikan bahwa dalam konfigurasi apache memungkinkan user untuk meng-override option atau directive dalam atau melalui file “.htaccess”. Jika Anda akan  menerapkannya proses autentikasi dalam document root (/var/www/html) maka pada section directory /var/www/html yang ditandai dengan tanda “<Directory /var/www/html>” pastikan terdapat  parameter “AllowOverride” tidak benilai “None” , tetapi “AuthConfig”, seperi berikut ini:
AllowOverride AuthConfig

Kemudian buatlah file dengan nama “.htaccess” dan diletakkan dalam direktori yang akan di proteksi. Dan isi file .htaccess sama dengan isi yang ditulis kedalam file konfigurasi apache pada cara yang pertama, sbb:
 AuthType Basic
AuthName "Restricted Files"
AuthDBMUserFile /etc/httpd/passwdbm
AuthDBMType DB
#Jika ingin mengijinkan user tertentu
#Require user henry
Require valid-user

Selanjutnya restart apache, dan coba Anda akses direktori tersebut lewat web.

Tidak ada komentar:

Posting Komentar