Server web Server web adalah sebuah perangkat lunak server yang berfungsi menerima permintaan HTTP atau HTTPS dari klien yang dikenal dengan browser web dan mengirimkan kembali hasilnya dalam bentuk halaman-halaman web yang umumnya berbentuk dokumen HTML. Server web yang terkenal diantaranya adalah Apache dan Microsoft Internet Information Service (IIS). Apache merupakan server web antar-platform, sedangkan IIS hanya dapat beroperasi di sistem operasi Windows. Server web juga dapat berarti komputer yang berfungsi seperti definisi di atas. Streaming Protocol Bagaimana cara sebuah media streaming dapat dikirimkan ke klien? Salah satu pendekatan adalah dengan mengalirkan media dari sebuah web server standar yang menggunakan hypertext transport protocol (HTTP). Protokol tersebut digunakan untuk mengirim dokumen dari sebuah web server. Biasanya, klien menggunakan sebuah media player, seperti QuickTime, RealPlayer, atau Windows Media Player, untuk memutar kembali media yang dialirkan oleh web server standar. Biasanya, pertama-tama klien meminta sebuah metafile, yang berisi lokasi sebuah berkas streaming media. Metafile tersebut dikirimkan ke web browser klien, dan browser akan membuka berkas yang dimaksud dengan memilah media player yang sesuai dengan jenis media yang dispesifikasikan di metafile. Masalah yang muncul jika pengiriman streaming media dari sebuah web server standar adalah web server tidak dapat memelihara status koneksi dengan klien. Hal ini dapat terjadi karena HTTP merupakan protokol yang stateless. Akibatnya, klien akan mengalami kesulitan pada saat ia melakukan pause selama pengiriman streaming media masih berlangsung. Pelaksanaan pause akan menyebabkan web server harus mengetahui status mana yang akan dimulai kembali ketika klien memutar ulang. Strategi alternatif yang dapat dilakukan untuk menanggulangi hal diatas adalah dengan menggunakan server streaming khusus yang didesain untuk men-streaming media, yaitu real time streaming protocol (RTSP). RTSP didesain untuk melakukan komunikasi antara server yang melakukan streaming dengan media player. Keuntungan RTSP adalah bahwa protokol ini menyediakan koneksi yang memiliki status antara server dan klien, yang dapat mempermudah klien ketika ingin melakukan pause atau mencari posisi random dalam stream ketika memutar kembali data. RTSP memiliki empat buah perintah. Perintah ini dikirim dari klien ke sebuah server streaming RTSP. Keempat perintah tersebut adalah: Setup. Server mengalokasikan sumber daya kepada sesi klien. Play. Server mengirim sebuah stream ke sesi klien yang telah dibangun dari perintah setup sebelumnya. Pause. Server menunda pengiriman stream namun tetap menjaga sumber daya yang telah dialokasikan. Teardown. Server memutuskan koneksi dan membebas tugaskan sumber daya yang sebelumnya telah digunakan. Gambar 24.2. Finite-State Machine yang merepresentasikan RTSP Hypertext markup language HyperText Markup Language (HTML) adalah sebuah bahasa markup yang digunakan untuk membuat sebuah halaman web dan menampilkan berbagai informasi di dalam sebuah browser Internet. Bermula dari sebuah bahasa yang sebelumnya banyak digunakan di dunia penerbitan dan percetakan yang disebut dengan SGML, HTML adalah sebuah standar yang digunakan secara luas untuk menampilkan halaman web dan HTML kini merupakan standar Internet yang saat ini dikendalikan oleh World Wide Web Consortium (W3C). Versi terakhir dari HTML adalah HTML 4.01, meskipun saat ini telah berkembang XHTML yang merupakan pengembangan dari HTML. Penjelajah web Penjelajah web (bahasa Inggris: web browser), disebut juga sebagai perambah, adalah perangkat lunak yang berfungsi menampilkan dan melakukan interaksi dengan dokumen-dokumen yang disediakan oleh server web. Penjelajah web yang populer adalah Microsoft Internet Explorer dan Mozilla Firefox. Penjelajah web adalah jenis agen pengguna yang paling sering digunakan. Web sendiri adalah Kumpulan jaringan berisi dokumen dan tersambung satu dengan yang lain, yang dikenal sebagai World Wide Web. Internet Information Services IS atau Internet Information Services atau Internet Information Server adalah sebuah HTTP web server yang digunakan dalam sistem operasi server Windows, mulai dari Windows NT 4.0 Server, Windows 2000 Server atau Windows Server 2003. Layanan ini merupakan layanan terintegrasi dalam Windows 2000 Server, Windows Server 2003 atau sebagai add-on dalam Windows NT 4.0. Layanan ini berfungsi sebagai pendukung protokol TCP/IP yang berjalan dalam lapisan aplikasi (application layer). IIS juga menjadi fondasi dari platform Internet dan Intranet Microsoft, yang mencakup Microsoft Site Server, Microsoft Commercial Internet System dan produk-produk Microsoft BackOffice lainnya. IIS telah berevolusi semenjak diperkenalkan pertama kali pada Windows NT 3.51 (meski kurang banyak digunakan) hingga IIS versi 6.0 yang terdapat dalam Windows Server 2003. Versi 5.0 diintegrasikan dalam Windows 2000, sedangkan Windows XP Professional memiliki IIS versi 5.1. Windows NT 4.0 memiliki versi 4.01 yang termasuk ke dalam add-on Windows NT Option Pack. Dalam Windows NT 4.0 Workstation atau Windows 95/98, IIS juga dapat diinstalasikan sebagai Microsoft Personal Web Server (PWS) Tentu saja kata web server tidak asing lagi di sebagian besar telinga kita, yaitu sebuah tempat untuk mempublikasikan informasi apa pun kepada publik melalui internet atau intranet tentang apa saja, baik oleh individu, kelompok, lembaga pemerintahan, perusahaan, dan lain-lain. Web server umumnya tidak berdiri sendiri, namun ada aplikasi yang mendukungnya, semacam PHP, OpenSSL, dan lain sebagainya. Salah satu aplikasi yang sudah sangat populer adalah Apache HTTP Server. Aplikasi ini mulai dirilis ke publik sejak tahun 1995. Web server yang menggunakan aplikasi Apache di seluruh dunia saat ini berdasarkan survei Netcraft Web Server Survey pada November 2006 saja sudah lebih dari 60% dari total 101,435,253 situs. Proyek Apache HTTP Server ini merupakan proyek open-source yang dikembangkan oleh Apache Software Foundation. Lembaga ini bertujuan mengembangkan Apache sebagai aplikasi web server modern yang bisa dipergunakan di multi platform OS, khususnya Unix dan Windows. Saya tidak akan membahas sejarah perkembangan Apache ini secara rinci. Untuk mengetahui lebih lengkap perkembangannya silakan kunjungi About the Apache HTTP Server Project. Dalam artikel ini, saya tidak hanya membahas Apache secara khusus saja, namun juga beberapa aplikasi yang umum dipergunakan bersama aplikasi ini, seperti OpenSSL, MySQL, dan PHP. 1. Instalasi 2.1. Install MySQL Sebelum menginstall Apache dan PHP, yang harus diinstall terlebih dahulu adalah MySQL dan OpenSSL. Untuk menginstalasi kedua aplikasi ini di FreeBSD cukup mudah melalui ports. $ cd /usr/ports/database/mysql51-server $ sudo make install $ sudo portupgrade -rR mysql51-server Command terakhir adalah untuk mengupgrade versi MySQL ke versi terbaru. Untuk mengaktifkan MySQL saat booting, buka file /etc/rc.conf dan tambahkan baris: mysql_enable = “YES” Copykan file konfigurasi MySQL: $ sudo cp /usr/local/share/mysql/my-medium.cnf /var/db/mysql/my.cnf $ sudo chgrp mysql /var/db/mysql/my.cnf Kemudian jalankan command berikut untuk mengaktifkan daemon MySQL. $ sudo /usr/local/etc/rc.d/mysql-server start Bila berhasil, seharusnya Anda akan melihat baris berikut saat menjalankan command ps ax | grep mysql: 678 p0- I 0:00.01 /bin/sh /usr/local/bin/mysqld_safe –defaults-extrafile=/var/db/mysql/my.cnf –user=mysql –datadir=/var/db/mysql 701 p0- S 383:04.45 /usr/local/libexec/mysqld –defaults-extrafile=/var/db/mysql/my.cnf –basedir=/usr/local –datadir=/var/db/mysql Selanjutnya buat password untuk MySQL root user: $ sudo mysqladmin -u root password ‘password-root-mysql’ Coba masuk ke MySQL console dengan password root tersebut. $ mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 603704 to server version: 5.0.22 Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the buffer. mysql> \q Bye 2.2. Install OpenSSL Langkah selanjutnya adalah menginstalasi OpenSSL, cara menginstalasi OpenSSL dalam hal ini menggunakan ports juga. $ cd /usr/ports/security/openssl $ sudo make install clean Buat direktori untuk menempatkan certificate SSL: $ sudo mkdir -p /usr/local/openssl/{certs,private} Kemudian generate private key 1024-bit: $ cd /usr/local/openssl $ sudo /usr/local/bin/openssl genrsa -out private/namadomain.com.key 1024 Ubah permission untuk direktori private menjadi: $ sudo chown -R root:wheel private $ sudo chmod -R 600 private $ sudo chmod u+X private Generate Certificate Signing Request (CSR) File: $ /usr/local/bin/openssl req -new -key private/namadomain.com.key -out certs/namadomain.com.csr Country Name (2 letter code) [GB]: ID State or Province Name (full name) [Some-State]: Propinsi Locality Name (eg, city) []: Kota Organization Name (eg, company) [Internet Widgits Pty Ltd]: PT. Nama Usaha Organizational Unit Name (eg, section) []: Bidang Usaha Perusahaan Common Name (eg, your name or your server’s hostname) []: namadomain.com Email Address []: [email protected] e-mail address is being protected from spam bots, you need JavaScript enabled to view it Please enter the following ‘extra’ attributes to be sent with your certificate request A challenge password []: masukkanpassword An optional company name []: Kemudian buat Certificate Signed (CRT) file: $ sudo /usr/local/bin/openssl x509 -req -days 365 -in certs/namadomain.com.csr -out certs/namadomain.com.crt -signkey private/namadomain.com.key Certificate yang dibuat itu nantinya akan digunakan bila webserver support SSL. 2.3. Install Apache Saya asumsikan, source Apache hasil download Anda disimpan di /home/users. $ cd /home/users $ tar -jxvf httpd-2.2.3.tar.bz2 $ cd httpd-2.2.3 $ ./configure \ –prefix=/usr/local/apache2 \ –enable-rewrite \ –enable-dav \ –enable-ssl \ –with-ssl=/usr/local \ –enable-vhost-alias \ –with-included-apr $ make $ sudo make install Keterangan dari masing-masing opsi di atas adalah: –prefix=[DIR]: Menginstall aplikasi ke target direktori yang ditentukan. –enable-rewrite: Mengaktifkan rule based URL manipulation melalui module mod_rewrite. –enable-dav: Mengaktifkan protocol WebDAV melalui module mod_dav. Dengan protocol WebDAV ini memungkinkan membuat, memindah, menyalin, dan menghapus resource pada sebuah web server. –enable-ssl: Mengaktifkan module SSL/TLS. –with-ssl=[DIR]: Di mana library SSL/TLS diinstall. –enable-vhost-alias: Support dengan banyak virtual host. –with-included-apr: Install apr. APR atau Apache Portable Runtime pada Apache 2.2.x versi merupakan source yang sudah menyatu dengan Apache Source. 2.4. Install PHP Sebelum Anda menginstalasi PHP, saya sarankan untuk menginstall aplikasi-aplikasi via ports yang diperlukan (recommended) PHP saat instalasinya. Aplikasi-aplikasi tersebut adalah: - mcrypt (/usr/ports/security/mcrypt) dan libmcrypt (/usr/ports/security/libmcrypt) - db4 (/usr/ports/databases/db4) dan gdbm (/usr/ports/databases/gdbm) - gd (/usr/ports/graphics/gd) - libxml2 (/usr/ports/textproc/libxml2) Saya asumsikan pula, source PHP yang Anda download disimpan di /home/users. $ cd /home/users $ tar -jxvf php-5.2.0.tar.bz2 $ cd php-5.2.0 $ ./configure \ –with-apxs2=/usr/local/apache2/bin/apxs \ –with-mysql=/usr/local \ –with-openssl=/usr/local \ –with-config-file-path=/usr/local/apache2/conf \ –with-png-dir=/usr/local/lib \ –with-gettext=/usr/local/lib \ –with-gd \ –with-zlib \ –with-xml \ –with-mcrypt=/usr/local/lib \ –enable-mbstring=all \ –disable-short-tags $ make $ make install Keterangan dari masing-masing opsi di atas adalah: –with-apxs2[=FILE]: Menyertakan shared Apache 2.0 Handler module. –with-mysql[=DIR]: Menyertakan dukungan MySQL. DIR adalah di mana binary MySQL diinstall. –with-openssl[=DIR]: Menyertakan dukungan OpenSSL. –with-config-file-path=PATH: Di mana file php.ini akan diletakkan. –with-png-dir[=DIR]: Menyertakan dukungan format file PNG. –with-gettext[=DIR]: Menyertakan dukungan GNU gettext. –with-gd[=DIR]: Menyertakan dukungan GD. –with-zlib[=DIR]: Menyertakan dukungan zlib. –with-libxml-dir[=DIR]: Menyertakan dukungan XML. –with-mcrypt[=DIR]: Menyertakan dukungan mcrypt atau Multi-cipher cryptographic library. –enable-mbstring: Mengaktifkan dukungan multibyte string. –disable-short-tags: Nonaktifkan penggunaan tag pendek <? pada script PHP. Edit file /usr/local/apache2/conf/php.ini dan sesuaikan dengan kebutuhan Anda. Pada dasarnya default file konfigurasi ini sudah cukup baik. Karena PHP diinstall sebagai module pada Apache, kita perlu mengubah kepemilikan direktori PHP yang hanya akan mengijinkan akses kepada user root dan www saja. $ sudo chown -R root:www /usr/local/lib/php $ sudo chmod -R g-w,o-rwx /usr/local/lib/php Edit file /usr/local/apache2/conf/httpd.conf dan ubah baris-baris berikut menjadi: <IfModule !mpm_netware_module> User www Group www </IfModule> ServerAdmin [email protected] e-mail address is being protected from spam bots, you need JavaScript enabled to view it ServerName www.namadomain.com:80 <IfModule dir_module> DirectoryIndex index.html index.php </IfModule> <IfModule mime_module> TypesConfig conf/mime.types AddType application/x-compress .Z AddType application/x-gzip .gz .tgz AddType application/x-httpd-php .php AddHandler cgi-script .cgi </IfModule> Aktifkan juga baris-baris berikut dengan menghilangkan tanda # di awal barisnya: Include conf/extra/httpd-autoindex.conf Include conf/extra/httpd-userdir.conf Include conf/extra/httpd-vhosts.conf Include conf/extra/httpd-dav.conf Include conf/extra/httpd-default.conf Include conf/extra/httpd-ssl.conf Selanjutnya ubah permission direktori Apache: $ cd /usr/local Ubah kepemilikan direktori apache2 ke user root:wheel $ sudo chown -R root:wheel apache2 Ubah permission pada direktori apache2. Karena direktori ini kepemilikannya oleh root:wheel dan supaya bisa diakses oleh group www, kita ijinkan group www ini membaca dan mengeksekusi file-file di bawahnya. $ sudo chmod 755 apache2 Selanjutnya pada direktori apache2 ini hanya akan mengijinkan user root saja untuk dapat membaca dan menulisinya dengan mengubah permission menjadi: $ sudo chmod -R 600 apache2/* Hanya user root saja yang dapat mengakses seluruh direktori yang berada di bawah direktori apache2: $ sudo chmod -R u+X apache2 $ cd apache2 Ubah kepemilikan direktori binary Apache ke user root: $ sudo chmod -R u+x bin Direktori cgi-bin juga berisi file-file binari. Hanya mengijinkan user root dan group www saja yang bisa mengaksesnya. $ sudo chgrp -R www cgi-bin $ sudo chmod -R u+x,g+x cgi-bin Web server akan membaca direktori icons, maka ubah pula kepemilikannya agar bisa dibaca oleh group www. $ sudo chgrp -R www icons $ sudo chmod -R g+rX icons Ubah juga permission direktori logs: $ sudo chgrp -R www logs $ sudo chmod g+wX logs Terakhir ubah kepemilikan direktori htdocs agar bisa dibaca oleh publik. Direktori ini nanti merupakan tempat menyimpan file-file web yang akan ditampilkan pada browser. Akses penulisan ke direktori ini hanya dibatasi kepada user root saja. $ sudo chgrp -R www htdocs $ sudo chmod -R g+rX htdocs Karena menginstall Apache dari source file. Kita harus membuat sendiri startup script-nya agar dapat dieksekusi oleh server pada saat booting. Start up script diletakkan di direktori /usr/local/etc/rc.d. Startup script dapat didownload di sini: Apache-2 FreeBSD Startup Script Kemudian tambahkan dua baris berikut pada file /etc/rc.conf: apache2_enable=”YES” apache2_flags=”-DSSL” Ubah permission file start up script menjadi: $ sudo chmod 555 /usr/local/etc/rc.d/apache.sh Jalankan file tersebut untuk mengaktifkan daemon httpd: $ sudo /usr/local/etc/rc.d/apache.sh start Periksa apakah daemon httpd sudah aktif dengan command ps ax: $ ps ax | grep httpd 33549 ?? Ss 0:12.88 /usr/local/apache2/bin/httpd -DSSL 33550 ?? I 0:00.43 /usr/local/apache2/bin/httpd -DSSL 33551 ?? I 0:00.40 /usr/local/apache2/bin/httpd -DSSL 33552 ?? I 0:00.32 /usr/local/apache2/bin/httpd -DSSL Apache-2 FreeBSD Startup Script #!/bin/sh # # $FreeBSD: ports/www/apache2/files/apache.sh,v 1.12 2006/01/15 01:11:11 clement Exp $ # # PROVIDE: apache2 # REQUIRE: NETWORKING SERVERS # BEFORE: DAEMON # KEYWORD: FreeBSD shutdown # # Add the following lines to /etc/rc.conf to enable apache2: # apache2_enable (bool): Set to "NO" by default. # Set it to "YES" to enable apache2 # apache2_profiles (str): Set to "" by default. # Define your profiles here. # apache2limits_enable (bool):Set to "NO" by default. # Set it to yes to run `limits $limits_args` # just before apache starts. # apache2_flags (str): Set to "" by default. # Extra flags passed to start command. # apache2limits_args (str): Default to "-e -C daemon" # Arguments of pre-start limits run. # apache2_http_accept_enable (bool): Set to "NO" by default. # Set to yes to check for accf_http kernel # module on start up and load if not loaded. . /etc/rc.subr name="apache2" rcvar=`set_rcvar` start_precmd="apache2_precmd" restart_precmd="apache2_checkconfig" reload_precmd="apache2_checkconfig" reload_cmd="apache2_graceful" graceful_cmd="apache2_graceful" gracefulstop_cmd="apache2_gracefulstop" configtest_cmd="apache2_checkconfig" command="/usr/local/apache2/bin/httpd" _pidprefix="/usr/local/apache2/logs/httpd" pidfile="${_pidprefix}.pid" required_files=/usr/local/apache2/conf/httpd.conf [ -z "$apache2_enable" ] && apache2_enable="NO" [ -z "$apache2_profiles" ] && apache2_profiles="" [ -z "$apache2_flags" ] && apache2_flags="" [ -z "$apache2limits_enable" ] && apache2limits_enable="NO" [ -z "$apache2limits_args" ] && apache2limits_args="-e -C daemon" [ -z "$apache2_http_accept_enable" ] && apache2_http_accept_enable="NO" apache2_accf() { retcode=0 if checkyesno apache2_http_accept_enable then /sbin/kldstat | grep accf_http 2>&1 > /dev/null retcode=${?} if [ ${retcode} -ne 0 ] then /sbin/kldload accf_http 2> /dev/null retcode=${?} fi else apache2_flags="${apache2_flags} -DNOHTTPACCEPT" fi [ ${retcode} -ne 0 ] && echo "Unable to load accf_http module" return ${retcode} } load_rc_config $name if [ -n "$2" ]; then profile="$2" if [ "x${apache2_profiles}" != "x" ]; then pidfile="${_pidprefix}.${profile}.pid" eval apache2_configfile="\${apache2_${profile}_configfile:-}" if [ "x${apache2_configfile}" = "x" ]; then echo "You must define a configuration file (apache2_${profile}_configfile)" exit 1 fi required_files="${apache2_configfile}" eval apache2_enable="\${apache2_${profile}_enable:${apache2_enable}}" eval apache2_flags="\${apache2_${profile}_flags:-${apache2_flags}}" eval apache2_http_accept_enable="\${apache2_${profile}_http_accept_enable:${apache2_http_accept_enable}}" eval apache2limits_enable="\${apache2limits_${profile}_enable:${apache2limits_enable}}" eval apache2limits_args="\${apache2limits_${profile}_args:${apache2limits_args}}" apache2_flags="-f ${apache2_configfile} -c \"PidFile ${pidfile}\" ${apache2_flags}" else echo "$0: extra argument ignored" fi else if [ "x${apache2_profiles}" != "x" -a "x$1" != "x" ]; then if [ "x$1" != "xrestart" ]; then for profile in ${apache2_profiles}; do echo "===> apache2 profile: ${profile}" /usr/local/etc/rc.d/apache2.sh $1 ${profile} retcode="$?" if [ "0${retcode}" -ne 0 ]; then failed="${profile} (${retcode}) ${failed:}" else success="${profile} ${success:-}" fi done exit 0 else restart_precmd="" fi fi fi if [ "${1}" != "stop" ] ; then \ apache2_accf || apache2_flags="${apache2_flags} -DNOHTTPACCEPT" fi apache2_requirepidfile() { if [ ! "0`check_pidfile ${pidfile} ${command}`" -gt 1 ]; then echo "${name} not running? (check $pidfile)." exit 1 fi } apache2_checkconfig() { echo "Performing sanity check on apache2 configuration:" eval ${command} ${apache2_flags} -t } apache2_graceful() { apache2_requirepidfile echo "Performing a graceful restart" eval ${command} ${apache2_flags} -k graceful } apache2_gracefulstop() { apache2_requirepidfile echo "Performing a graceful stop" eval ${command} ${apache2_flags} -k graceful-stop } apache2_precmd() { apache2_checkconfig if test -f /usr/local/apache2/bin/envvars then . /usr/local/apache2/bin/envvars fi if checkyesno apache2limits_enable then eval `/usr/bin/limits ${apache2limits_args}` 2>/dev/null else return 0 fi } extra_commands="reload graceful gracefulstop configtest" run_rc_command "$1"