Caddy adalah server web sumber terbuka yang ditulis dalam bahasa Go. Ini menyediakan dukungan HTTP/3, TLS v1.3, konfigurasi SSL otomatis dengan Let's Encrypt, reverse proxy, dan mendukung banyak plugin untuk memperluas fungsinya. Ini memiliki keuntungan dari semua konfigurasi yang disajikan dari satu file tidak peduli berapa banyak situs yang Anda butuhkan untuk menjadi tuan rumah.
Tutorial ini akan mencakup instalasi dan konfigurasi Caddy dan PHP pada server berbasis Fedora 34 dan CentOS 8. Kami akan membahas cara menghosting satu dan beberapa situs dan cara menggunakan proxy terbalik bersama dengan beberapa fitur keamanan lainnya.
Prasyarat
-
Server berbasis Fedora 34 atau CentOS 8
-
Pengguna non-root dengan hak istimewa sudo
-
Nama domain yang menunjuk ke alamat IP server
-
SELinux dinonaktifkan.
$ sudo setenforce 0
-
Pastikan semuanya diperbarui.
$ sudo dnf update
Langkah 1 - Mengonfigurasi Firewall
Langkah pertama adalah mengkonfigurasi Firewall untuk membuka port HTTP dan HTTPS. Fedora dan CentOS hadir dengan firewall Firewalld yang telah diinstal sebelumnya.
Periksa apakah firewall sedang berjalan.
$ sudo firewall-cmd --state
Anda akan mendapatkan output berikut.
running
Periksa layanan/port yang diizinkan saat ini.
$ sudo firewall-cmd --permanent --list-services
Ini akan menunjukkan output berikut.
dhcpv6-client mdns ssh
Izinkan port HTTP dan HTTPS.
$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=https
Periksa kembali status firewall.
$ sudo firewall-cmd --permanent --list-services
Anda akan melihat keluaran serupa.
dhcpv6-client http https mdns ssh
Muat Ulang Firewall.
$ sudo systemctl reload firewalld
Langkah 2 - Instal Caddy
Langkah pertama adalah menginstal server. Langkah-langkah instalasi tetap sama untuk Fedora 34 dan CentOS 8.
$ sudo dnf install 'dnf-command(copr)'
$ sudo dnf copr enable @caddy/caddy
$ sudo dnf install caddy
Anda dapat memverifikasi instalasi dengan perintah berikut.
$ caddy version
v2.4.3 h1:Y1FaV2N4WO3rBqxSYA8UZsZTQdN+PwcoOcAiZTM8C0I=
Langkah 3 - Dasar-Dasar Konfigurasi Caddy
Caddy menggunakan JSON sebagai format utama untuk menyimpan atau menulis konfigurasi. Ini adalah cara paling fleksibel untuk menulis konfigurasi dan mendukung semua fitur Caddy. Tetapi jika Anda tidak tahu cara menulis file JSON, Caddy menawarkan cara yang lebih mudah dalam bentuk Caddyfile.
Paket Fedora / CentOS menyertakan Caddyfile di /etc/caddy/Caddyfile
. Seharusnya terlihat seperti berikut (mengabaikan komentar)
:80 {
root * /usr/share/caddy
file_server
}
Aktifkan dan mulai daemon caddy.
$ sudo systemctl enable --now caddy
Anda dapat membuka URL http://youripaddress
untuk memeriksa. Anda akan melihat halaman selamat datang berikut.
Caddy menawarkan banyak fitur dan konfigurasi, jadi kami hanya akan menggunakan yang penting untuk melayani situs web kami. Konfigurasi default melayani melalui HTTP, yang ditetapkan sebagai :80
. root
direktif memberitahu Caddy untuk mencari file yang akan disajikan di /usr/share/caddy
direktori.
file_server
direktif memberitahu Caddy untuk bertindak sebagai server file yang berarti hanya akan melayani file statis melalui alamat default.
Mengonfigurasi Caddy untuk situs web HTML Dasar
Mari kita buat file konfigurasi caddy dasar untuk melayani situs web statis.
Buat direktori untuk meng-host situs web Anda dan menyimpan file log Anda.
$ sudo mkdir -p /var/www/example.com/html
$ sudo mkdir /var/log/caddy
Setel kepemilikan direktori ke Caddy.
$ sudo chown caddy:caddy /var/www/example.com/html -R
$ sudo chown caddy:caddy /var/log/caddy
Buat file HTML untuk diuji dan buka untuk diedit.
$ sudo nano /var/www/example.com/html/index.html
Tambahkan kode berikut.
<!DOCTYPE html>
<html>
<head>
<title>Hello from Caddy!</title>
</head>
<body>
<h1>Hello, from Caddy!</h1>
</body>
</html>
Tekan Ctrl + X untuk menutup editor dan tekan Y saat diminta untuk menyimpan file.
Buka Caddyfile untuk diedit.
$ sudo nano /etc/caddy/Caddyfile
Ganti kode yang ada dengan kode berikut.
example.com {
root * /var/www/example.com/html
file_server
encode gzip
log {
output file /var/log/caddy/example.access.log
}
@static {
file
path *.ico *.css *.js *.gif *.jpg *.jpeg *.png *.svg *.woff *.pdf *.webp
}
header @static Cache-Control max-age=5184000
tls [email protected]
}
Tekan Ctrl + X untuk menutup editor dan tekan Y saat diminta untuk menyimpan file.
Mari kita lihat semua arahan dalam file. encode gzip
direktif memberitahu Caddy untuk mengompres file menggunakan kompresi Gzip.
log
direktif mengeluarkan log akses untuk situs ke /var/log/caddy/example.access.log
mengajukan. Secara default, Caddy memutar file log ketika mencapai 100 MB. File yang dirotasi akan dihapus setelah 90 hari atau jika ada lebih dari 10 log yang dirotasi. Anda dapat mengubah parameter default dengan cara berikut.
log {
output file /var/log/caddy/example.access.log {
roll_size 10MB
roll_keep 5
roll_keep_for 240h
}
}
Pada kode di atas, file log yang dirotasi dibatasi hingga 10 MB dan dihapus setelah 10 hari (240 jam) atau jika ada lebih dari 5 log yang dirotasi.
Caddy akan membuat dan menginstal sertifikat SSL secara otomatis tanpa intervensi apa pun. tls
direktif memungkinkan kami memberikan opsi tambahan untuk mengonfigurasi HTTPS seperti alamat email yang digunakan untuk mendapatkan laporan Let's Encrypt.
header
direktif mengaktifkan Cache-control pada semua file statis (file gambar/javascript/CSS). Anda dapat menambahkan lebih banyak ekstensi file atau menyalin kode untuk mengatur durasi yang berbeda untuk format file yang berbeda. Anda harus mengubah nilai static
untuk sesuatu yang berbeda karena itu adalah referensi bernama.
Setelah selesai, Anda dapat memvalidasi konfigurasi Anda menggunakan perintah berikut.
$ caddy validate --adapter caddyfile --config /etc/caddy/Caddyfile
Kita harus menggunakan --adapter caddyfile
pilihan karena, secara default, perintah hanya memvalidasi konfigurasi JSON.
Jika Anda mendapatkan peringatan berikut, Anda dapat memperbaikinya dengan mudah dengan satu perintah.
WARN input is not formatted with 'caddy fmt' {"adapter": "caddyfile", "file": "/etc/caddy/Caddyfile", "line": 2}
Jalankan perintah berikut untuk memperbaiki kesalahan.
$ caddy fmt --overwrite /etc/caddy/Caddyfile
Perintah di atas memformat dan menimpa file Caddy.
Restart Caddy untuk mengaktifkan konfigurasi. Anda harus me-restart server setiap kali Anda membuat perubahan pada konfigurasi.
$ sudo systemctl restart caddy
Buka di browser Anda, dan Anda akan melihat halaman berikut yang artinya, konfigurasi berfungsi.
Mengonfigurasi Beberapa Situs di Caddy
Anda dapat mengonfigurasi beberapa situs dalam satu file caddy. Untuk melakukannya, buat blok terpisah untuk setiap situs dengan cara berikut.
example1.com {
root * /var/www/example1.com/html
...
}
example2.com {
root * /var/www/example2.com/html
...
}
Metode ini baik untuk beberapa situs, tetapi satu situs bisa menjadi sangat besar dan sulit dikelola jika Anda menghosting beberapa situs.
Buat direktori `/etc/caddy/caddyconf.
$ sudo mkdir /etc/caddy/caddyconf
Sekarang Anda dapat mengimpor file konfigurasi dari direktori di /etc/caddty/caddyfile
Anda di bagian atas file.
import caddyconf/*.conf
Langkah terakhir adalah membuat file konfigurasi individual untuk setiap situs.
Mengonfigurasi situs PHP
Sejauh ini, kita hanya berbicara tentang melayani situs statis menggunakan Caddy. Anda dapat menggunakan Caddy dengan mudah untuk melayani situs PHP dinamis juga. Untuk mengaktifkan dukungan PHP, tambahkan kode berikut ke dalam blok situs Anda.
example1.com {
root * /var/www/example1.com/html
...
php_fastcgi unix//run/php-fpm/www.sock
}
Anda juga perlu menginstal PHP.
$ sudo dnf install php-fpm php-cli php-gd
Anda dapat menginstal modul PHP tambahan apa pun yang Anda butuhkan. Anda juga perlu mengkonfigurasi file /etc/php-fpm.d/www.conf
. Buka file untuk diedit.
$ sudo nano /etc/php-fpm.d/www.conf
Kita perlu menyetel pengguna/grup proses PHP Unix ke caddy . Temukan user=apache
dan group=apache
baris dalam file dan ubah ke nginx.
...
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
; will be used.
; RPM: apache user chosen to provide access to the same directories as httpd
user = caddy
; RPM: Keep a group allowed to write in log dir.
group = caddy
...
Temukan baris listen.acl_users = apache,nginx
dan ubah nilainya menjadi berikut.
...
listen.acl_users = apache,nginx,caddy
...
Simpan file dengan menekan Ctrl + X dan memasukkan Y saat diminta.
Mulai proses PHP-fpm.
$ sudo systemctl start php-fpm
Untuk menguji pengaturan PHP Anda, buat file test.php
di html
folder.
$ sudo nano /var/www/example.com/html/test.php
Tambahkan konten berikut ke dalamnya dan simpan file dengan menekan Ctrl + X dan memasukkan Y saat diminta.
<?php phpinfo();
Luncurkan http://example.com/test.php
di browser web Anda, dan Anda akan melihat yang berikut ini.
Mengonfigurasi Proksi Terbalik
Caddy juga dapat digunakan sebagai server proxy terbalik. Untuk mengaturnya, gunakan kode berikut.
example1.com {
...
reverse_proxy localhost:8000 {
header_up Host {http.reverse_proxy.header.X-Forwarded-Host}
}
}
Langkah 4 - Opsi Caddy Global
Caddyfile memungkinkan Anda untuk mengatur beberapa opsi yang akan berlaku secara global, yaitu, mereka akan berlaku untuk semua situs Anda. Mendefinisikan opsi global bermanfaat agar Anda tidak perlu mendeklarasikannya kembali di setiap blok server.
Anda harus menyertakan opsi global di bagian paling atas Caddyfile Anda. Ada banyak opsi yang dapat Anda atur secara global. Kami akan melalui beberapa yang penting saja. Selebihnya, Anda harus merujuk ke dokumentasi Caddy.
Berikut adalah beberapa opsi default yang dapat Anda gunakan di Caddyfile Anda.
{
#TLS Options
email [email protected]
servers :443 {
protocol {
experimental_http3
}
max_header_size 5mb
}
servers :80 {
protocol {
allow_h2c
}
max_header_size 5mb
}
}
Pada kode di atas email
menentukan ID email yang digunakan untuk mendaftarkan sertifikat SSL dengan otoritas Let's Encrypt. Stapel OCSP meningkatkan kinerja situs HTTPS dengan memberikan informasi pencabutan sertifikat ke browser secara otomatis. max_header_size
opsi menentukan ukuran header permintaan HTTP klien yang akan diuraikan.
Kami juga telah mengaktifkan protokol HTTP/3 untuk situs HTTPS dan dukungan HTTP/2 untuk situs HTTP. Ini adalah fitur eksperimental dan mungkin pada akhirnya akan dihapus, jadi berhati-hatilah sebelum mengaktifkannya.
Langkah 5 - Meningkatkan Keamanan
Mengaktifkan Otentikasi HTTP
Anda dapat mengaktifkan otentikasi HTTP sederhana untuk direktori tertentu. Pertama, Anda perlu membuat kredensial autentikasi untuk itu.
Caddy hanya menerima kata sandi hash dalam konfigurasi. Jadi, Anda perlu membuat kata sandi hash terlebih dahulu. Jalankan perintah berikut untuk melakukannya.
$ caddy hash-password
Enter password:
Confirm password:
JDJhJDEwJEVCNmdaNEg2Ti5iejRMYkF3MFZhZ3VtV3E1SzBWZEZ5Q3VWc0tzOEJwZE9TaFlZdEVkZDhX
Setelah Anda menyiapkan kata sandi, masukkan kode berikut ke dalam file Caddy Anda.
basicauth /secret/* {
John JDJhJDEwJEVCNmdaNEg2Ti5iejRMYkF3MFZhZ3VtV3E1SzBWZEZ5Q3VWc0tzOEJwZE9TaFlZdEVkZDhX
}
Perintah di atas akan melindungi /secret
direktori dengan kredensial yang baru saja Anda buat.
Mengeraskan Keamanan Situs dan mengaktifkan HSTS
Ada konfigurasi keamanan lain yang dapat Anda tambahkan untuk melindungi situs Anda. Untuk itu, kita akan membuat file lain /etc/caddy/caddy_security.conf
.
$ sudo nano /etc/caddy/caddy_security.conf
Tambahkan kode berikut ke dalamnya.
header {
Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
X-Xss-Protection "1; mode=block"
X-Content-Type-Options "nosniff"
X-Frame-Options "DENY"
Permissions-Policy "interest-cohort=()"
Content-Security-Policy "upgrade-insecure-requests"
Referrer-Policy "strict-origin-when-cross-origin"
Cache-Control "public, max-age=15, must-revalidate"
Feature-Policy "accelerometer 'none'; ambient-light-sensor 'none'; autoplay 'self'; camera 'none'; encrypted-media 'none'; fullscreen 'self'; geolocation 'none'; gyroscope 'none'; magnetometer 'none'; microphone 'none'; midi 'none'; payment 'none'; picture-in-picture *; speaker 'none'; sync-xhr 'none'; usb 'none'; vr 'none'"
}
Kode di atas mengaktifkan/menerapkan yang berikut ini.
- Mengaktifkan dukungan HSTS untuk situs dan semua subdomainnya.
- Mengaktifkan pemfilteran XSS.
- Mencegah Konten/MIME Sniffing.
- Ini mencegah situs Anda dimuat di dalam IFRAME.
- Ini mencegah situs Anda disertakan dalam uji coba pelacakan FLOC.
- Menambahkan kebijakan keamanan Konten tentang cara agen pengguna memperlakukan URL yang tidak aman.
- Menerapkan kebijakan perujuk sehingga hanya perujuk yang dikirim untuk permintaan lintas asal jika protokol mengatakan hal yang sama.
- Kebijakan Fitur menyediakan mekanisme untuk mengaktifkan dan menonaktifkan fitur browser tertentu.
Selanjutnya, impor file di salah satu blok situs yang Anda inginkan.
example.com {
...
import /etc/caddy/caddy_security.conf
}
Mulai ulang server untuk menerapkan perubahan.
Kesimpulan
Ini mengakhiri tutorial menginstal dan mengkonfigurasi server web Caddy di server berbasis Fedora 34 / CentOS 8. Jika Anda memiliki pertanyaan, kirimkan di komentar di bawah.