Administrator Falcot Corp memutuskan untuk menggunakan server HTTP Apache, yang ada dalam Debian Jessie adalah versi 2.4.10.
Memasang paket apache2 adalah semua yang diperlukan. Ini berisi semua modul, termasuk Multi-Processing Modules (MPM) yang mempengaruhi bagaimana Apache menangani pemrosesan paralel dari banyak permintaan (yang biasanya disediakan dalam paket terpisah apache2-mpm-*). Ini juga akan menarik apache2-utils yang mengandung utilitas baris perintah yang kita akan temui nanti.
MPM yang digunakan secara signifikan mempengaruhi cara Apache menangani permintaan bersamaan. Dengan MPM worker, itu menggunakan thread (proses ringan), sedangkan dengan MPM prefork itu menggunakan kumpulan proses yang dibuat terlebih dahulu. Dengan MPM event ini juga menggunakan thread, tapi koneksi yang tidak aktif (terutama yang terus dibuat terbuka dengan fitur HTTP keep-alive) diserahkan kembali ke manajemen thread yang terdedikasi.
Para administrator Falcot juga memasang libapache2-mod-php5 untuk menyertakan dukungan PHP di Apache. Hal ini menyebabkan MPM event baku dinonaktifkan, dan prefork digunakan sebagai pengganti, karena PHP hanya bekerja di bawah MPM tertentu itu.
Apache adalah server yang modular, dan banyak fitur dilaksanakan oleh modul eksternal yang dimuat oleh program utama saat inisialisasinya. Konfigurasi standar hanya memfungsikan modul-modul yang paling umum, tetapi memfungsikan modul cukup dengan menjalankan a2enmod modul
; untuk menonaktifkan modul, perintahnya adalah a2dismod modul
. Program ini benar-benar hanya membuat (atau menghapus) link simbolik di /etc/apache2/mods-enabled/
menunjuk pada file yang sebenarnya (yang disimpan dalam /etc/apache2/mods-available/
).
Dengan konfigurasi bakunya, server web mendengarkan pada port 80 (seperti yang dikonfigurasi di /etc/apache2/ports.conf
), dan menyajikan halaman dari direktori /var/www/html/
(seperti yang dikonfigurasi di /etc/apache2/sites-enabled/000-default.conf
).
11.2.2. Mengkonfigurasi Host Virtual
Suatu host virtual adalah identitas tambahan untuk server web.
Apache menganggap dua macam host virtual: yang didasarkan pada alamat IP (atau port), dan yang mengandalkan nama domain dari server web. Metode pertama memerlukan mengalokasikan alamat IP yang berbeda (atau port) untuk setiap situs, sedangkan yang kedua dapat bekerja pada satu alamat IP (dan port), dan situs dibedakan oleh nama host yang dikirim oleh klien HTTP (yang hanya bekerja di versi 1.1 dari protokol HTTP — untungnya versi tersebut sudah cukup tua sehingga semua klien sudah menggunakannya).
(Semakin) langkanya alamat IPv4 biasanya lebih mengarah ke metode kedua; namun, itu dibuat lebih kompleks jika host virtual perlu menyediakan HTTPS juga, karena protokol SSL tidak selalu disediakan untuk berbasis nama virtual hosting; ekstensi SNI (Server Name Indication) yang memungkinkan kombinasi tersebut tidak ditangani oleh semua browser. Ketika beberapa situs HTTPS perlu menjalankan pada server yang sama, mereka akan biasanya dibedakan baik dengan berjalan pada port lain atau pada alamat IP yang berbeda (IPv6 dapat membantu di sana).
Konfigurasi default untuk Apache 2 memfungsikan host virtual berbasis nama. Selain itu, sebuah host virtual default didefinisikan dalam berkas /etc/apache2/sites-enabled/000-default.conf
; host virtual ini akan digunakan jika tidak ditemukan host yang cocok dengan permintaan yang dikirim oleh klien.
Masing-masing host virtual ekstra ini kemudian digambarkan oleh sebuah berkas yang disimpan dalam /etc/apache2/situs-available/
. Maka menyiapkan sebuah situs web untuk domain falcot.org
adalah cukup dengan sekedar membuat berkas berikut, kemudian memfungsikan host virtual dengan a2ensite www.falcot.org
.
Contoh 11.16. Berkas /etc/apache2/sites-available/www.falcot.org.conf
<VirtualHost *:80>
ServerName www.falcot.org
ServerAlias falcot.org
DocumentRoot /srv/www/www.falcot.org
</VirtualHost>
Apache server, yang dikonfigurasi sejauh ini, menggunakan berkas log yang sama untuk semua host virtual (walaupun ini bisa diganti dengan menambahkan direktif CustomLog
dalam definisi host virtual). Maka masuk akal untuk menyesuaikan format berkas log ini agar menyertakan nama host virtual. Ini dapat dilakukan dengan menciptakan sebuah berkas /etc/apache2/conf-available/customlog.conf
yang menentukan format baru untuk semua berkas log (dengan direktif LogFormat
) dan memfungsikannya dengan a2enconf customlog
. Baris CustomLog
harus juga akan dihapus (atau dijadikan komentar) dari berkas /etc/apache2/sites-available/000-default.conf
.
Contoh 11.17. Berkas /etc/apache2/conf.d/customlog.conf
# Format log baru termasuk nama host (virtual)
LogFormat "%v %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" vhost
# Sekarang mari kita pakai format "vhost" ini secara baku
CustomLog /var/log/apache2/access.log vhost
Bagian ini mengulas secara singkat beberapa direktif konfigurasi Apache yang sering digunakan.
Berkas konfigurasi utama biasanya memuat beberapa blok Directory
blok; mereka memungkinkan menentukan perilaku yang berbeda untuk server tergantung pada lokasi berkas yang diminta. Blok tersebut umumnya memuat direktif Options
dan AllowOverride
.
Contoh 11.18. Blok direktori
<Directory /var/www>
Options Includes FollowSymlinks
AllowOverride All
DirectoryIndex index.php index.html index.htm
</Directory>
Direktif DirectoryIndex
berisi daftar berkas yang akan dicoba ketika permintaan klien cocok dengan suatu direktori. Berkas pertama yang ada dalam daftar digunakan dan dikirim sebagai respon.
Direktif Options
diikuti oleh daftar pilihan yang diaktifkan. Nilai None
menonaktifkan semua pilihan; sejalan dengan itu, All
memfungsikan mereka semua kecuali MultiViews
. Pilihan yang tersedia meliputi:
ExecCGI
menunjukkan bahwa skrip CGI dapat dijalankan.
FollowSymlinks
memberitahu server bahwa taut simbolik dapat diikuti, dan bahwa respon harus berisi isi dari target taut tersebut.
SymlinksIfOwnerMatch
juga memberitahu server untuk mengikuti taut simbolik, tetapi hanya bila taut dan target memiliki pemilik yang sama.
Includes
memfungsikan
Server Side Includes (disingkat
SSI). Ini adalah direktif yang tertanam di halaman HTML dan dieksekusi sambil jalan untuk setiap permintaan.
Indexes
memberitahu server untuk memberikan daftar isi direktori jika permintaan HTTP yang dikirim oleh klien menunjuk ke direktori tanpa berkas indeks (yaitu, ketika tidak ada berkas yang disebutkan oleh direktif
DirectoryIndex
yang ada dalam direktori ini).
MultiViews
memungkinkan negosiasi konten; ini dapat digunakan oleh server untuk mengembalikan halaman web yang cocok dengan bahasa pilihan sebagaimana dikonfigurasi dalam peramban.
Direktif AllowOverride
mencantumkan semua pilihan yang dapat diaktifkan atau dinonaktifkan melalui berkas .htaccess
. Penggunaan umum pilihan ini adalah untuk membatasi ExecCGI
, sehingga administrator memilih pengguna yang diizinkan untuk menjalankan program di bawah identitas server web (pengguna www-data
).
11.2.3.1. Memerlukan Otentikasi
Dalam beberapa keadaan, akses ke sebagian dari sebuah situs web harus dibatasi, jadi hanya pengguna sah yang memberikan nama pengguna dan kata sandi yang diberikan akses ke isi.
Contoh 11.19. berkas .htaccess
yang memerlukan otentikasi
Require valid-user
AuthName "Private directory"
AuthType Basic
AuthUserFile /etc/apache2/authfiles/htpasswd-private
Berkas
/etc/apache2/authfiles/htpasswd-private
berisi daftar pengguna dan kata sandi; itu umumnya dimanipulasi dengan perintah
htpasswd
. Sebagai contoh, perintah berikut digunakan untuk menambahkan pengguna atau mengubah sandi:
#
htpasswd /etc/apache2/authfiles/htpasswd-private user
New password:
Re-type new password:
Adding password for user user
11.2.3.2. Membatasi Akses
Direktif Require
mengendalikan pembatasan akses untuk suatu direktori (dan subdirektorinya, secara rekursif).
Dapat digunakan untuk membatasi akses berdasarkan kepada banyak kriteria; kita akan berhenti di menggambarkan pembatasan akses berdasarkan alamat IP dari klien, tapi itu bisa dibuat jauh lebih kuat daripada itu, terutama ketika beberapa direktif Require
digabung dalam sebuah blok RequireAll
.
Contoh 11.20. Hanya mengizinkan dari jaringan lokal
Require ip 192.168.0.0/16
Penganalisis log sering dipasang pada sebuah server web; karena memberi administrator gambaran yang presisi atas pola penggunaan server.
Para administrator Falcot Corp memilih AWStats (Advanced Web Statistics), untuk menganalisis berkas log Apache mereka.
Langkah konfigurasi pertama adalah penyesuaian berkas /etc/awstats/awstats.conf
. Para administrator Falcot mempertahankannya kecuali parameter berikut:
LogFile="/var/log/apache2/access.log"
LogFormat = "%virtualname %host %other %logname %time1 %methodurl %code %bytesd %refererquot %uaquot"
SiteDomain="www.falcot.com"
HostAliases="falcot.com REGEX[^.*\.falcot\.com$]"
DNSLookup=1
LoadPlugin="tooltips"
Semua parameter ini didokumentasikan oleh komentar dalam berkas templat. Secara khusus, parameter LogFile
dan LogFormat
menggambarkan lokasi dan format berkas log dan informasi di dalamnya; SiteDomain
dan HostAliases
berisi daftar berbagai nama yang dipakai oleh situs web utama.
Untuk situs lalu lintas tinggi, DNSLookup
biasanya tidak diatur ke 1
; untuk situs kecil, seperti Falcot yang dijelaskan di atas, pengaturan ini memungkinkan mendapatkan laporan yang lebih mudah dibaca yang meliputi nama-nama lengkap mesin bukan alamat IP mentah.
AWStats juga akan diaktifkan untuk host virtual lain; masing-masing host virtual perlu memiliki berkas konfigurasi tersendiri, seperti misalnya /etc/awstats/awstats.www.falcot.org.conf
.
Contoh 11.21. Berkas konfigurasi AWStats untuk sebuah host virtual
Include "/etc/awstats/awstats.conf"
SiteDomain="www.falcot.org"
HostAliases="falcot.org"
AWStats menggunakan banyak ikon yang disimpan dalam direktori /usr/share/awstats/ikon/
. Agar ikon ini akan tersedia di situs web, konfigurasi Apache perlu disesuaikan untuk menyertakan direktif berikut:
Alias /awstats-icon/ /usr/share/awstats/icon/
Setelah beberapa menit (dan setelah skrip dijalankan beberapa kali), hasil tersedia daring: