GNU/Linux >> Belajar Linux >  >> Cent OS

Cara Install dan Konfigurasi Caddy Web Server dengan PHP di Fedora 34 / CentOS 8

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.

  1. Mengaktifkan dukungan HSTS untuk situs dan semua subdomainnya.
  2. Mengaktifkan pemfilteran XSS.
  3. Mencegah Konten/MIME Sniffing.
  4. Ini mencegah situs Anda dimuat di dalam IFRAME.
  5. Ini mencegah situs Anda disertakan dalam uji coba pelacakan FLOC.
  6. Menambahkan kebijakan keamanan Konten tentang cara agen pengguna memperlakukan URL yang tidak aman.
  7. Menerapkan kebijakan perujuk sehingga hanya perujuk yang dikirim untuk permintaan lintas asal jika protokol mengatakan hal yang sama.
  8. 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.


Cent OS
  1. Cara Instal Apache Web Server di CentOS 7

  2. Cara Menginstal dan Mengkonfigurasi VNC di CentOS 7

  3. Cara Menginstal dan Mengonfigurasi Nextcloud dengan Apache di CentOS 7

  1. Cara Menginstal dan Mengonfigurasi Nagios di CentOS 7

  2. Cara Menginstal dan Mengonfigurasi Server NFS di CentOS 8

  3. Cara Menginstal dan Mengkonfigurasi VNC di CentOS 8

  1. Cara Menginstal dan Mengkonfigurasi ownCloud di CentOS 8

  2. Cara Instal dan Konfigurasi Redmine di CentOS 8

  3. Cara Menginstal dan Mengonfigurasi Icinga 2 / Icinga Web 2 di CentOS 7 dan RHEL 7