Product SiteDocumentation Site

11.2. Server Web (HTTP)

The Falcot Corp administrators decided to use the Apache HTTP server, included in Debian Bullseye at version 2.4.52.

11.2.1. Memasang Apache

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.
The Falcot administrators also install libapache2-mod-php so as to include the PHP 7.4 support in Apache. This causes the default event MPM to be disabled, and prefork to be used instead. To use the event MPM one can use php-fpm.
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. Menambahkan dukungan untuk SSL

Apache 2.4 termasuk modul SSL (mod_ssl) yang diperlukan untuk HTTP yang aman (HTTPS) secara baku. Hanya perlu diaktifkan dengan a2enmod ssl, kemudian direktif yang diperlukan harus ditambahkan ke berkas konfigurasi. Contoh konfigurasi tersedia di /etc/apache2/sites-available/default-ssl.conf.
Jika Anda ingin menghasilkan sertifikat terpercaya, Anda dapat mengikuti bagian Bagian 10.2.1, “Membuat sertifikat tepercaya yang gratis” dan kemudian menyesuaikan variabel berikut:
SSLCertificateFile      /etc/letsencrypt/live/DOMAIN/fullchain.pem
SSLCertificateKeyFile   /etc/letsencrypt/live/DOMAIN/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/DOMAIN/chain.pem
SSLCACertificateFile    /etc/ssl/certs/ca-certificates.crt
Some extra care must be taken if you want to favor SSL connections with Perfect Forward Secrecy (those connections use ephemeral session keys ensuring that a compromise of the server's secret key does not result in the compromise of old encrypted traffic that could have been stored while sniffing on the network). Have a look at Mozilla's recommendations in particular:
As an alternative to the standard SSL module, there is an extension module called mod_gnutls, which is shipped with the libapache2-mod-gnutls package and enabled with the a2enmod gnutls command. Unfortunately the version packaged for Debian had serious issues and even security implications and is therefor not part of the Debian Bullseye release.

11.2.3. 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.13. 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.14. Berkas /etc/apache2/conf-available/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

11.2.4. Direktif Umum

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.15. Blok direktori

<Directory /srv/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 also tells the server to follow symbolic links, but only when the link and its target have the same owner.
  • Includes memfungsikan Server Side Includes (disingkat SSI). Ini adalah direktif yang tertanam di halaman HTML dan dieksekusi sambil jalan untuk setiap permintaan.
  • IncludesNOEXEC memfungsikan Server Side Includes (SSI) tapi menonaktifkan perintah exec dan membatasi direktif include ke berkas teks/markup.
  • 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.4.1. Memerlukan Otentikasi

In some circumstances, access to part of a website needs to be restricted, so only legitimate users who provide a username and a password are granted access to the contents. These feature are provided by the mod_auth* modules.

Contoh 11.16. 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.4.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.17. Hanya mengizinkan dari jaringan lokal

Require ip 192.168.0.0/16

11.2.5. Penganalisis Log

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.18. Berkas konfigurasi AWStats untuk sebuah host virtual

Include "/etc/awstats/awstats.conf"
SiteDomain="www.falcot.org"
HostAliases="falcot.org"
AWStats uses many icons stored in the /usr/share/awstats/icon/ directory. In order for these icons to be available on the web site, the Apache configuration needs to be adapted to include the following directive (check out /usr/share/doc/awstats/examples/apache.conf for a more detailed example):
Alias /awstats-icon/ /usr/share/awstats/icon/
Setelah beberapa menit (dan setelah skrip dijalankan beberapa kali), hasil tersedia daring: