Product SiteDocumentation Site

11.2. Server Web (HTTP)

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

11.2.1. Memasang Apache

Installing the apache2 package is all that is needed. It contains all the modules, including the Multi-Processing Modules (MPMs) that affect how Apache handles parallel processing of many requests, which used to be provided in separate apache2-mpm-* packages. It will also pull apache2-utils containing the command line utilities that we will discover later.
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-php7.3 so as to include the PHP 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 php7.3-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. Adding support for SSL

Apache 2.4 includes the SSL module (mod_ssl) required for secure HTTP (HTTPS) out of the box. It just needs to be enabled with a2enmod ssl, then the required directives have to be added to the configuration files. A configuration example is provided in /etc/apache2/sites-available/default-ssl.conf.
If you want to generate trusted certificates, you can follow section Bagian 10.2.1, “Creating gratis trusted certificates” and then adjust the following variables:
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 compromission of the server's secret key does not result in the compromission 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.

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. The /etc/apache2/conf-available/customlog.conf file

# 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 indicates that CGI scripts can be executed.
  • FollowSymlinks tells the server that symbolic links can be followed, and that the response should contain the contents of the target of such links.
  • SymlinksIfOwnerMatch also tells the server to follow symbolic links, but only when the link and the its target have the same owner.
  • Includes enables Server Side Includes (SSI for short). These are directives embedded in HTML pages and executed on the fly for each request.
  • IncludesNOEXEC allows Server Side Includes (SSI) but disables the exec command and limits the include directive to text/markup files.
  • Indexes tells the server to list the contents of a directory if the HTTP request sent by the client points at a directory without an index file (i.e., when no files mentioned by the DirectoryIndex directive exists in this directory).
  • MultiViews enables content negotiation; this can be used by the server to return a web page matching the preferred language as configured in the browser.
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

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.16. berkas .htaccess yang memerlukan otentikasi

Require valid-user
AuthName "Private directory"
AuthType Basic
AuthUserFile /etc/apache2/authfiles/htpasswd-private
The /etc/apache2/authfiles/htpasswd-private file contains a list of users and passwords; it is commonly manipulated with the htpasswd command. For example, the following command is used to add a user or change their password:
# htpasswd /etc/apache2/authfiles/htpasswd-private user
New password:
Re-type new password:
Adding password for user user

11.2.4.2. Membatasi Akses

The Require directive controls access restrictions for a directory (and its subdirectories, recursively).
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 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: