Monday, June 13, 2016

Asas Apache (Part 4) - Configuration Sections

Configuration Sections


Ok kali ni aku nak citer pasal configuration sections. Dalam fail konfigurasi tu sebenarnya ada section, ataupun dipanggil container. Section ni gunanya kalau korang nak set Directive tertentu tu terpakai benda2 tertentu macam direktori, fail, host atau URL. Kalau korang rasa Directive tu terpakai untuk semua, maksudnya global, tak payah lah letak dalam section nanti kena taip banyak2 leceh. Kat bawah ni aku senaraikan container dalam apache

  1. <Directory>
  2. <DirectoryMatch>
  3. <Files>
  4. <FilesMatch>
  5. <If>
  6. <IfDefine>
  7. <IfModule>
  8. <IfVersion>
  9. <Location>
  10. <LocationMatch>
  11. <Proxy>
  12. <ProxyMatch>
  13. <VirtualHost>

Types of Configuration Section Containers


Section atau container ada 2 jenis, kalau setiap request yang datang, setiap container tu akan dinilai atau diperiksa oleh server, matching atau tak dengan request yang dibuat client tu. Kalau matching baru Directive dalam container tu akan terpakai. Ada satu lagi jenis container yang hanya diperiksa bila server start atau restart, macam <IfDefine>, <IfModule>, atau <IfVersion>.


<IfDefine> container ni gunanya bila korang set parameter kat command line httpd. Contoh httpd -DWebsiteTutup. Nampak tak, -D tu argumen untuk letak parameter, so kiranya nilai parameternya adalah WebsiteTutup. Katakanlah korang nak buat maintenance website kan, so korang kena define parameter WebsiteTutup, pastu kena bagitau apache apa nak buat bila ada parameter tu. So kenalah create container.

<IfDefine WebsiteTutup>  
         Redirect "/" "http://server2.example.com/"  
</IfDefine>
Bila korang restart httpd, semua request ke website korang tu akan redirect pergi ke server lain.


<IfModule> pulak gunanya bila Module tu dah available dalam server sama ada module tu static atau dinamic. Kalau dinamik, korang kena import dulu kat baris atas guna directive LoadModule. Contoh korang nak guna directive MimeMagicFile dekat module mod_mime_magic. Cara nak create container macam kat bawah

<IfModule mod_mime_magic.c>  
            MimeMagicFile "conf/magic" 
 </IfModule>









Sunday, June 12, 2016

Asas Apache (Part 3) - Main Configuration Files

Main Configuration Files

 

Fail utama configuration apache ni nama dia httpd.conf. Lokasi fail ni dah siap-siap ditentukan bila install apache. Tapi kalau korang nak override lokasi ni boleh je guna command line -f masa nak start httpd daemon.

Kalau korang tak nak longgok semua benda dalam fail utama tu, korang boleh guna directive Include untuk import fail-fail konfigurasi yang lain. Kalau malas nak import satu2, korang boleh guna wildcard (simbol "*") untuk import semua sekaligus. Setiap kali korang tukar apa2 benda dalam fail konfigurasi ni, kena restart httpd daemon barulah konfigurasi yang baru tu berkesan.


Syntax

 

Nak tulis apa2 dalam fail konfigurasi ni kena tau syntax. Syntax ni macam rule atau cara nak menulis mengikut format yang ditetapkan. Kalau korang tak ikut rule ni, server takkan paham apa yang korang nak buat, so nanti akan keluar error.

Cara nak menulis sonang je, setiap baris mestilah ada directive dan diikuti oleh argumen. Directive dengan argumen tu mestilah ada jarak. Kalau argumen tu ada space pulak, korang kena letak quote (simbol ""). Directive ni case-insensitif, maksudnya dia tak kisah korang nak letak huruf besar ke kecik ke campur2 pun boleh. Tapi argumen case-sensitif, tak boleh campur2.

Kalau korang tak nak server baca baris tu, atau nak server abaikan baris, korang boleh letak simbol # depan sekali kat baris tu. Automatik dia akan jadi comment.

Benda2 lain yang server tak kisah (abaikan atau takde error) adalah kalau ada space kat depan Directive atau baris dah sememannya kosong takde isi.

Saiz konfigurasi fail lepas import semua fail-fail berkaitan tak boleh melebihi 16MiB.

Kalau nak test fail tu ada error syntax atau tak, bleh guna command apachectl configtest.

Module

 

httpd ni adalah sejenis modular server. Maksud modular ni korang boleh tambah atau buang mana-mana module yang korang rasa pakai dan tak pakai. Untuk upkan service ni, httpd hanya perlukan core asas je untuk run. Jadi httpd ni sangat ringan dan guna resource sikit je (kalau basic setup lah).

module tambahan yang nak diguna boleh ditambah dalam httpd secara dinamik, maksudnya tak perlu compile semula httpd kalau nak tambah atau buang dengan gunakan directive LoadModule.


Scope of Directive

 

Directive yang korang letak dalam fail konfigurasi tu akan berkesan kat seluruh server. Tapi kalau korang nak dia cuma ada effect kat bahagian tertentu aje dalam server, korang boleh hadkan dalam skop tertentu macam dalam section <Directory>, <DirectoryMatch>, <Files>, <FilesMatch>, <Location> dan <LocationMatch>. Maksudnya, directive yang korang buat dalam section2 tersebut hanya akan berkesan untuk lokasi2 tertentu dalam filesystem atau URL tertentu. Kalau nak buat nested pun boleh jugak.

Macam yang aku cakap entry sebelum ni, httpd boleh letak banyak laman web pada satu server.  Bila banyak laman web dah tentulah banyak domain name kan? Ada istilah lain yang dipanggil iaitu Virtual Hosting. Sebab tu company2 web hosting tu boleh buat untung, diorang cuma sediakan satu server je pastu sewakan kat berjuta2 orang. Boleh untung wooo hehehe

Directive tu pun boleh dikecikkan skopnya kalau letak dalam section <VirtualHost>, so dia hanya akan berkesan pada website tertentu aje.

Tapi kena ingat, tak semua directive relevan untuk setiap section. Ada jugak directive yang tak boleh letak dalam section dan kena set as global.


.htaccess Files


Macam yang aku dah citer sebelum ni, fail .htaccess ni special sikit. Tujuannya adalah untuk decentralize management. Kenapa nama dia .htaccess? dot kat depan tu bertujuan untuk hidden kan fail (kalau kat linux, nak hiddenkan fail kena letak dot kat depan). htaccess tu nama default yang digunakan, kalau nak tukar boleh je, guna directive AccessFileName.

Fail .htaccess ni kena letak dalam web folder, bila dah letak kat situ, dia akan apply untuk folder tersebut beserta dengan sub-folder sekali. So setiap kali ada request kat folder tu, fail .htaccess ni pun akan di baca sekali. Maksudnya, tak perlulah nak restart httpd kalau ada buat apa2 perubahan. On the spot boleh pakai.

Fail ni biasanya digunakan oleh programmer yang takde access pada fail utama configuration tu, tapi tak semua directive boleh guna dalam .htaccess.

System admin pun sebenarnya boleh tentukan directive mana yang boleh guna dengan gunakan directive AllowOverride dekat fail utama. Kalau nak lebih security, jangan kasi guna terus fail .htaccess ni hehehe.





















Asas Apache (Part 2) - Binding to Addresses and Ports

Binding to Addresses and Ports


Ok entry kali ni citer pasal address dan ports. Dalam server korang tu mestilah adalah IP address kan? Even kalau server tu tak connect ke network pun still ada IP address local iaitu 127.0.0.1.  Sebelum aku citer lebih lanjut pasal address dan port, korang tau tak apache start guna program apa?

Untuk Windows, apache start as service. Kalau Linux, apache start as daemon nama dia httpd. Tu cuma istilah je tapi bendanya lebih kurang sama. Ingat Windows, ingat service. Ingat Linux, ingat daemon. Sebab aku suka guna linux, so aku refer daemon je pasni.

So bila korang start httpd daemon tu, by default dia akan listen semua IP address yang ada pada server tu. Listen tu maksudnya dia akan ambik semua request yang datang daripada mana-mana IP address yang dia tengah listen. Korang boleh jugak set dia listen hanya pada port tertentu atau IP address tertentu aje atau nak combine dua-dua sekali pun boleh. Contoh korang nak set IP address 192.168.0.1 untuk port 8080.

Contoh nak set listen dalam configuration file.

1) Kalau nak kasi server ambik request pada port 80 dan 8080 untuk semua IP address.

Listen 80
Listen 8080

2) Kalau nak kasi server ambik request pada port 80 untuk satu interface (interface ni network card yang ada IP address), dan port 8080 untuk interface yang lain.

Listen 192.168.0.1:80
Listen 192.168.0.2:8080

ok aku dah malas nak tulis, berenti sini dulu.

Asas Apache (Part 1) - Pengenalan

Pengenalan


Ada beberapa benda basic yang korang kena tau pasal web server apache, kalau nak senang tengok je documentation dalam website apache. Untuk bab pengenalan ni, aku listkan beberapa perkara yang korang kena tau.

  1. Clients, Servers, and URLs
  2. Hostnames dan DNS
  3. Configuration Files dan Directive
  4. Web Site content
  5. Log File dan Troubleshooting 
Kalau korang kerja bahagian server dan kena setup web server apache, korang kena rajin baca semua documentation dari yang basic sampai lah advance. Sebabnya, ianya sangat membantu korang untuk plan apa nak buat dan senang nak troubleshoot kalau ada problem.

Clients, Servers, and URLs

 

Kalau korang buka browser macam firefox, chrome atau internet explorer, benda pertama yang korang buat adalah taip address, betul tak? contoh address popular - http://www.google.com hehehe

Address tu juga dikenal sebagai URL atau Uniform Resource Locators. Dalam URL ni sebenarnya ada beberapa benda yang kena paham iaitu protocol, servername, URL-path dan query. Apa benda tu? jom tengok.

protocol - protocol ni membolehkan client dan server berkomunikasi. Macam manusia jugak lah, kalau nak berkomunikasi korang kenalah bercakap dengan bahasa yang masing-masing paham kan? Kalau dua2 tak paham dah jadi macam ayam dengan itik. Ada dua protocol yang biasanya digunakan iaitu http dan https.

servername - servername ni macam address kat atas tu lah, www.google.com, ini lah servername. Ada juga yang kata benda tu domain name. Tak kisahlah apa pun namanya yang penting korang paham benda tu apa.

URL-path - ok lepas korang taip servername kan, contoh http://prpm.dbp.gov.my/default.html (aku ambik contoh lain supaya senang paham). Apa2 je selepas "http://prpm.dbp.gov.my/" dikenali sebagai URL-path. So default.html tu lah URL-path iaitu sejenis fail. Tapi sebenarnya, URL-path ni ada 3 benda, sama ada fail, handler (macam server-status) atau fail program (macam index.php).

query - kadang2 dekat URL-path tu ada tanda soal "?" di ikuti dengan argumen, contoh "?no=1". Benda nilah dinamakan query string, iaitu maklumat tambahan yang dihantar ke server untuk diproses.

Bila korang tekan enter je, sebenarnya korang sedang menghantar request ke server menggunakan maklumat2 di atas. Server akan respon setiap request korang tu dengan menghantar status code.  Status code ni sebenarnya nak bagitau yang request korang tu berjaya atau tak. Setiap code tu berbeza2 bergantung jenis error, nanti aku bukak bab lain cerita pasal error.


Hostnames dan DNS


Kalau korang tau pasal rangkaian kan, mesti korang tau apa itu IP address betul tak? IP address ni sebenarnya adalah logical address bagi sesuatu mesin komputer. Apa itu logical address, nanti aku bukak bab lain hahaha. Sebenarnya, bila korang taip servername dekat URL address tu, komputer korang tu tak tau pun nak hantar ke mana request yang korang buat tu. So apa dia buat, dia akan convert servername tu kepada IP address server. Tapi macam mana komputer tu tau IP address tu, itulah gunanya DNS. Korang kena register servername tu dalam DNS dulu baru lah komputer boleh tau IP address tu. Apa pulak DNS tu? nanti aku bukak bab lain hahaha.


Hostname ni apa pulak? Hostname ni sama macam servername. Dalam satu server fizikal tu sebenarnya boleh letak banyak hostname. Dan lebih dari satu hostname boleh point ke IP address yang sama, dan lebih daripada satu IP address boleh letak dalam satu server fizikal. Nampak tak sebenarnya korang boleh letak semua laman web korang tu dalam satu server. Tak payah lah nak membazir satu sistem satu server, selain kos tinggi, nak maintain pun payah.


Configuration Files dan Directive

Configuration file apache ni mudah je, simpan dalam bentuk text. Lokasinya bergantung macam korang setup server tu lah. Default configuration file nama dia httpd.conf sebagai master file. Kalau korang baru take over server tu, cari fail ni dulu, lepas tu tengok lah dalam dia macam mana server tu di configure. Biasanya, orang akan pecah2 kan configuration file tu supaya mudah nak manage. Takde lah semua longgok dalam fail httpd.conf tu. Sebab fail httpd.conf ni master fail, so fail yang kecik2 tu kena import masuk ke dalam fail ni, macam mana nak import, guna Include.

Selain daripada tu, ada configuration file yang agak special sikit nama dia .htaccess. Fail ni sebagai tambahan kepada fail utama httpd.conf. Biasanya orang guna fail ni kalau dia tak dapat access pada fail utama. Contohnya programmer.

Ok apa pulak directive tu? Directive tu sebenarnya cara configuration file tu ditulis. Caranya, keyword diikuti dengan argumen. Contoh directive - BufferSize integer. BufferSize tu adalah keyword manakala integer tu adalah argumen.

Setting configuration ni pulak ada global dan local. Kalau global tu directive terpakai untuk semua dan diluar kawasan <Directory>, <Location>,<VirtualHost> atau mana-mana section. Kalau local, maknanya directive tu hanya terpakai pada section tertentu saja seperti <VirtualHost>.


 Web Site Content

 

Web site content ni maksudnya kandungan laman web korang tu lah sama ada dinamik atau statik. Maksud dimanik adalah content tu tak tetap, boleh berubah-rubah mengikut request yang korang buat. Statik pulak contentnya sama je, walaupun korang request pada masa berbeza.

Contoh content yang static adalah fail HTML, CSS, Javascript, gambar, atau apa-apa fail dalam filesystem.  Kat mana korang simpan fail ni dalam server? Apache gunakan directive DocumentRoot untuk tetapkan lokasi fail-fail tu. Korang boleh set global atau local.

Korang tau PHP kan? PHP tu salah satu content yang dinamik tapi sebenarnya PHP ni kira third-party module, bukan asal usul daripada Apache. Kalau Apache punya original, diorang guna handlers atau CGI program untuk generate content dinamik.


Log Files dan Troubleshooting

 

Kebolehan korang untuk baca dan paham log files ni amatlah bagus sebab dapat jimatkan masa korang untuk troubleshoot error atau aktiviti yang pelik macam hacking. Kalau korang troubleshoot tanpa tengok log files samalah macam korang drive kereta tapi mata tutup hehehe

Lokasi log files ni ada dekat directive ErrorLog. Korang boleh set global atau local. Aku cadangkan korang simpan log files tu selama 6 bulan.