GNU/Linux >> Belajar Linux >  >> Debian

Instal Nginx dengan PHP dan MySQL (LEMP) plus SSL di Debian 10

LEMP adalah singkatan dari software stack berikut:Linux kernel, Nginx server web, MariaDB basis data (atau MySQL ), dan PHP bahasa pemrograman sisi server. Perangkat lunak ini banyak digunakan pada server di Internet saat ini untuk menyediakan situs web dinamis atau aplikasi web interaktif.

Nginx adalah server web modern dan hemat sumber daya yang dikembangkan secara aktif dan merupakan server web kedua yang paling banyak digunakan di Internet setelah server HTTP Apache. Ini sangat cepat karena menggunakan pendekatan asinkron dan berbasis peristiwa untuk memproses permintaan.

Tutorial ini menunjukkan cara menginstal dan mengkonfigurasi tumpukan LEMP (Nginx dengan MariaDB dan PHP 7) pada versi terbaru Debian 10.

PERSYARATAN

  • Versi terbaru dari sistem operasi Debian 10, yang dapat diperoleh dari tautan berikut https://www.debian.org/CD/http-ftp/, diinstal dari awal di VPS, mesin virtual atau langsung di mesin yang didedikasikan untuk diri sendiri.
  • Akses langsung ke konsol server atau koneksi SSH jarak jauh.
  • Antarmuka jaringan yang dikonfigurasi dengan alamat IP statis untuk mesin
  • Nama domain publik terdaftar dengan catatan DNS A dan CNAME (www) yang dikonfigurasi di sisi server nama. Dalam panduan ini, kami menggunakan domain example.com sebagai contoh.

Langkah 1:Konfigurasi Awal

Langkah pertama adalah login dengan root atau dengan pengguna dengan hak akses root di sistem Anda dan perbarui komponen Debian 10 (upgrade kernel, update paket, dan patch keamanan) dengan mengeluarkan perintah berikut.

sudo apt  update
sudo apt upgrade
sudo apt dist-upgrade

Selanjutnya, pastikan Anda menambahkan nama deskriptif untuk nama host mesin Anda dengan menjalankan perintah di bawah ini. Selanjutnya, Anda harus memulai ulang sistem untuk menerapkan nama host baru yang sesuai.

sudo hostnamectl set-hostname hostname.yourdomain.com
sudo init 6

Selanjutnya, lanjutkan dan instal utilitas net-tools wget, curl, dan bash-completion untuk menggunakannya nanti guna mengelola server Debian Anda dengan mudah.

sudo apt install net-tools sudo wget curl bash-completion

Langkah 2:Instal Server Web Nginx

Nginx adalah server web modern dan efisien sumber daya yang digunakan untuk menampilkan halaman web kepada pengunjung di internet. Instal server web Nginx dari repositori Debian 10 dengan menjalankan perintah di bawah ini di konsol server Anda.

sudo apt-get install nginx

Seperti yang ditunjukkan pada gambar di atas, pengelola paket apt akan memeriksa dependensi tambahan untuk paket dan menanyakan apakah Anda setuju untuk melanjutkan proses penginstalan. Jawab dengan ya (y ) untuk menginstal Nginx.

Selanjutnya, jalankan netstat perintah untuk menampilkan soket jaringan pada sistem Anda dan memverifikasi apakah daemon nginx mendengarkan pada port 80/TCP. Atau, Anda mungkin ingin mengeluarkan systemctl perintah untuk memeriksa status daemon nginx seperti yang diilustrasikan pada gambar di bawah ini.

sudo netstat -tlp
sudo netstat –tlpn
sudo systemctl status nginx.service

Setelah server nginx aktif dan berjalan di sistem Anda, terbitkan ifconfig perintah untuk menampilkan informasi antarmuka jaringan dan mencantumkan alamat IP mesin Anda. Kemudian, buka browser dan kunjungi halaman web default Nginx melalui protokol HTTP dengan menambahkan alamat IP di browser Anda. Pesan “Selamat datang di Nginx!” harus ditampilkan di jendela browser Anda.

http://www.example.com

atau

http://192.168.0.100

Langkah 3:Aktifkan Nginx HTTP/2.0 Protocol

Secara default, versi terbaru dari binari Nginx yang disediakan oleh repositori Debian 10 dibuat dengan protokol HTTP/2.0. HTTP/2.0 terintegrasi dengan protokol TSL/SSL dan dapat meningkatkan kecepatan pemuatan halaman web melalui transaksi yang aman.

Semua browser modern, seperti Chrome atau Firefox, harus mendukung protokol ini secara default. Namun, perhatikan bahwa browser Microsoft Internet Explorer dan Microsoft Edge belum dapat menguraikan protokol http2.

Untuk mengaktifkan protokol HTTP/2.0 di Nginx pada Debian 10, Anda perlu membuat beberapa perubahan pada file konfigurasi Nginx default atau membuat file konfigurasi baru dan menambahkan blok kode TLS untuk 443 server. Untuk mencapai ini, pertama-tama buat cadangan konfigurasi default situs Nginx yang tersedia dengan menjalankan perintah berikut. Konfirmasikan bahwa pencadangan berhasil dengan mencantumkan konten direktori yang tersedia di situs.

sudo cp /etc/nginx/sites-available/default{,.backup}
ls /etc/nginx/sites-available/

Selanjutnya, buat file konfigurasi Nginx TLS menggunakan editor teks dan tambahkan konten berikut.

sudo nano /etc/nginx/sites-available/default-ssl

default-ssl kutipan file:

    server {
                listen 443 ssl http2 default_server;
                listen [::]:443 ssl http2 default_server;
                #server_name  www.domain.tld;
                server_name _;
                                
                root /var/www/html;
                                
                access_log /var/log/nginx/access.log;
                error_log /var/log/nginx/error.log;
                
                #SSL Certificates
                ssl_certificate "/etc/nginx/ssl/cert.pem";
                ssl_certificate_key "/etc/nginx/ssl/privekey.pem";
                ssl_dhparam /etc/nginx/ssl/dhparam.pem;
                
                ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
                #ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
 
                ssl_session_cache shared:SSL:1m;
                ssl_session_timeout 10m;
                ssl_ciphers HIGH:!aNULL:!MD5;
                ssl_prefer_server_ciphers  on;
               
                add_header Strict-Transport-Security "max-age=31536000;
                #includeSubDomains" always;
 
                location / {
                index index.php index.html index.htm;
                    try_files $uri $uri/ /index.php?$args $uri/ =404;
                }
 
                                set $cache_uri $request_uri;
                
                location ~ /.well-known {
                allow all;
                               }
               location ~ \.php$ {
                                include snippets/fastcgi-php.conf;
                #
                #             # With php-fpm (or other unix sockets):
                              fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
                #             # With php-cgi (or other tcp sockets):
                #             fastcgi_pass 127.0.0.1:9000;
                }
 
                # deny access to .htaccess files, if Apache's document root
                # concurs with nginx's one
                #
                #location ~ /\.ht {
                #             deny all;
                #}
                   }

Pernyataan yang memungkinkan penggunaan protokol HTTP/2.0 diwakili oleh kata http2 dari baris di bawah ini.

 listen 443 ssl http2 default_server;

Jika browser pengunjung Anda tidak mendukung protokol HTTP2, hapus http2 word dari konfigurasi server Anda untuk menonaktifkan protokol dan memulai ulang layanan nginx untuk menerapkan perubahan.

Jika Anda memiliki domain terdaftar atau menggunakan hosting virtual berdasarkan alamat IP, Anda harus menambahkan nama domain atau alamat IP setelah server_name direktif seperti yang ditunjukkan pada contoh di bawah ini.

server_name www.example.com example.com;

Setelah Anda selesai mengedit file konfigurasi default Nginx dengan pengaturan di atas

Konfigurasi SSL di Nginx

Dalam file konfigurasi TSL nginx di atas, kami telah menentukan jalur untuk sertifikat dan kunci TLS. Karena kami belum menginstal kunci di sistem Anda, masukkan perintah berikut untuk membuat file dan kunci sertifikat SSL yang ditandatangani sendiri. Selama pembuatan sertifikat SSL, Anda akan ditanyai serangkaian pertanyaan. Masukkan kode dua digit untuk negara, negara bagian, atau provinsi Anda, nama kota Anda, nama organisasi Anda, nama unit organisasi Anda, Nama Umum server Anda, dan alamat email yang valid. Anda harus memastikan untuk menyetel Nama Umum agar cocok dengan catatan FQDN komputer Anda dari server DNS atau alamat IP server Anda yang digunakan untuk mengakses situs web. Sertifikat dan kunci disimpan di direktori baru di bawah direktori nginx bernama ssl, seperti yang ditunjukkan pada tangkapan layar berikut.

sudo mkdir /etc/nginx/ssl
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/privekey.pem -out /etc/nginx/ssl/cert.pem
ls /etc/nginx/ssl/

Juga, buat sandi Diffie-Hellman baru yang kuat, yang dapat ditemukan di file konfigurasi di atas di ssl_dhparam baris pernyataan, dengan mengeluarkan perintah di bawah ini:

sudo openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048

Terakhir, setelah Anda membuat kunci Diffie-Hellman, aktifkan file konfigurasi TLS dengan membuat tautan simbolis untuk default-ssl file konfigurasi dari situs-tersedia direktori ke situs-enabled direktori dengan mengeluarkan perintah berikut.

ln -s /etc/nginx/sites-available/default-ssl /etc/nginx/sites-enabled/

Selanjutnya, uji file konfigurasi Nginx untuk kesalahan sintaks dan, jika semuanya baik-baik saja, mulai ulang daemon Nginx untuk menerapkan semua perubahan dengan menjalankan perintah di bawah ini.

sudo nginx -t
sudo systemctl restart nginx.service

Periksa apakah Konfigurasi SSL berhasil

Untuk mengonfirmasi apakah server web Nginx mengikat pada port SSL, jalankan perintah netstat dan periksa apakah port 443 ditampilkan dalam mode mendengarkan.

netstat -tlpn | grep nginx

Tangkapan layar di bawah mengilustrasikan langkah-langkah di atas.

Kemudian, navigasikan ke nama domain Anda atau alamat IP server Anda melalui protokol HTTP dari browser untuk menampilkan halaman default nginx. Karena Anda menggunakan sertifikat yang ditandatangani sendiri, kesalahan akan ditampilkan di browser Anda. Konfirmasi kesalahan untuk meneruskan ke halaman utama default nginx.

Jika Nginx tidak menyediakan index.html default halaman di direktori webroot, jalankan perintah berikut untuk membuat halaman indeks.

echo "test page" | tee /var/www/html/index.html

Untuk mengonfirmasi keberadaan protokol HTTP/2.0 yang diiklankan oleh Nginx, jalankan perintah di bawah ini. Cari h2 kata dalam protokol yang diiklankan oleh server.

 openssl s_client -connect localhost:443 -nextprotoneg ''

Anda juga dapat memvisualisasikan status koneksi dan memeriksa apakah protokol http2 diiklankan oleh Nginx dari browser Chrome dengan menekan tombol fungsi F12 dan meminta halaman. Untuk menampilkan protokol yang digunakan oleh permintaan, buka tab Jaringan, klik kanan pada menu Jenis dan centang Protokol yang diajukan. Protokol HTTP2 harus ditampilkan sebagai h2 di kolom protokol saat ini, seperti yang diilustrasikan pada tangkapan layar di bawah ini.

Langkah 4:Instal PHP 7

Server web Nginx dapat menyajikan konten web dinamis dengan bantuan juru bahasa pemrograman PHP melalui manajer proses PHP FastCGI yang mana Nginx meneruskan permintaan untuk diproses. Pengelola proses FastCGI dapat diperoleh dengan menginstal php-fpm paket pra-kompilasi yang ditawarkan oleh repositori resmi Debian 9.

Untuk menginstal php-fpm process manager dan PHP7.0 interpreter di sistem bersama dengan paket tambahan yang memungkinkan PHP berkomunikasi dengan server web Nginx, jalankan perintah di bawah ini di konsol server Anda:

sudo apt install php7.3 php7.3-fpm php7.3-curl php7.3-gd

Mulai PHP-FPM

Setelah interpreter PHP 7.3 berhasil diinstal pada sistem Anda, mulai dan periksa daemon php7.3-fpm dengan mengeluarkan perintah di bawah ini:

sudo systemctl start php7.3-fpm
sudo systemctl status php7.3-fpm

Dalam file konfigurasi TLS Nginx di atas, kami telah menambahkan konfigurasi blok untuk manajer proses PHP FastCGI untuk menyajikan konten dinamis. Blok kode yang memungkinkan Nginx menggunakan interpreter PHP ditunjukkan pada kutipan di bawah ini, sehingga tidak diperlukan langkah lebih lanjut untuk memodifikasi file konfigurasi TSL Nginx. Tanda hashtag # dari awal baris pada tangkapan layar di bawah ini adalah komentar. Baris yang dikomentari dari file konfigurasi diabaikan secara default oleh server web Nginx.

location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.3-fpm.sock;
}

Uji Konfigurasi PHP

Untuk menguji dan memvalidasi apakah Nginx dapat meneruskan file php ke prosesor PHP dengan benar, buat file PHP info.php uji file konfigurasi dengan mengeluarkan perintah di bawah ini

sudo su -c 'echo "<?php phpinfo(); ?>" > /var/www/html/info.php'

Kemudian, kunjungi halaman info php di browser web Anda dengan menavigasi ke nama domain server Anda atau alamat IP publik diikuti dengan /info.php seperti yang ditunjukkan pada gambar di bawah ini.

https://www.example.com/info.php

atau

http://192.168.0.100/info.php

Anda juga dapat memeriksa apakah protokol HTTP/2.0 diiklankan oleh server dengan menelusuri baris $_SERVER[‘SERVER_PROTOCOL’] pada Variabel PHP.

Untuk menginstal modul PHP7.3 lainnya, jalankan pencarian apt php7.3 perintah untuk menemukan modul PHP tertentu dan menginstalnya. Jika Anda berencana untuk menginstal Sistem Manajemen Konten, seperti WordPress, maka instal modul tambahan ini:

sudo apt install php7.3-mcrypt php7.3-mbstring

Namun, modul PHP yang baru diinstal tidak diaktifkan secara default di sistem Anda. Untuk mengaktifkannya, mulai ulang layanan PHP-FPM.

sudo systemctl restart php7.3-fpm.service

Langkah 5:Instal Database MariaDB

Akhirnya, potongan terakhir dari teka-teki tumpukan LAMP hilang dalam database. Komponen LEMP database MariaDB digunakan untuk menyimpan record dalam tabel dan kolom. Ini akan mengelola data aplikasi web secara dinamis. Untuk menginstal MariaDB, jalankan perintah berikut di konsol server Anda. Kemudian, restart daemon PHP FPM untuk mengaktifkan modul PHP-MySQL yang diperlukan untuk mengakses database.

sudo apt install mariadb-server mariadb-client php7.0-mysql
sudo systemctl restart php7.0-fpm.service

Secara default, akun root sistem atau pengguna dengan hak akses root dapat mengakses database tanpa memberikan kata sandi. Untuk mengubah perilaku ini sehingga MySQL meminta kata sandi setiap kali pengguna sistem mencoba mengakses database, masuk ke database MySQL menggunakan antarmuka baris perintah dengan hak akses root dan jalankan perintah berikut di konsol MySQL:

sudo mysql
MariaDB> use mysql;
MariaDB> update user set plugin='' where User='root';
MariaDB> flush privileges;
MariaDB> exit

Setel kata sandi root di MariaDB

Pada langkah selanjutnya, pastikan Anda mengamankan MariaDB dengan menjalankan skrip keamanan mysql_secure_installation. Ini disediakan oleh paket instalasi dari repositori Debian. Saat menjalankan skrip akan mengajukan serangkaian pertanyaan yang dirancang untuk mengamankan database MariaDB. Seperti:untuk mengubah kata sandi root MySQL, menghapus pengguna anonim, menonaktifkan login root jarak jauh, dan menghapus database pengujian. Jalankan skrip dengan mengeluarkan perintah di bawah ini. Katakan ya untuk semua pertanyaan yang diajukan untuk mengamankan daemon MySQL sepenuhnya. Gunakan output skrip di bawah ini kecuali sebagai panduan.

sudo mysql_secure_installation
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!
In order to log into MariaDB to secure it, we'll need the current
password for the root user.  If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.
Enter current password for root (enter for none):

OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

You already have a root password set, so you can safely answer 'n'.

Change the root password? [Y/n] y

New password:

Re-enter new password:

Password updated successfully!

Reloading privilege tables..

 ... Success!

By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] y

 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.
Disallow root login remotely? [Y/n] y

 ... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.
Remove test database and access to it? [Y/n] y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] y

 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

Terakhir, untuk menguji fungsionalitas MariaDB, masuk ke database dari konsol dan jalankan perintah berikut. Daftar database default harus ditampilkan di konsol MariaDB. Keluar dari konsol MariaDB dengan keluar pernyataan.

mysql -u root –p
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
3 rows in set (0.00 sec)
 
MariaDB [(none)]> exit

Itu saja! Server web Nginx, database MariaDB, dan bahasa pemrograman PHP diinstal pada mesin Debian 10 Anda. Sekarang Anda dapat mulai membuat situs web atau aplikasi web dinamis untuk pengunjung Anda.


Debian
  1. Cara Menginstal dan mengatur PHP dan Nginx (LEMP) di Debian 11

  2. Cara menginstal dan mengkonfigurasi server LEMP (Nginx, MySQL dan PHP) pada VPS Debian 6 (squeeze)

  3. Cara Install LEMP Stack Nginx, MySQL, PHP di Debian 11

  1. Instal Lets Encrypt dan Secure Nginx dengan SSL/TLS di Debian 9

  2. Cara Instal Nginx dengan PHP dan MySQL (LEMP Stack) di Ubuntu 18.04

  3. Instal Automad CMS dengan Nginx dan Mari Enkripsi SSL di Debian 10

  1. Cara Menginstal InvoicePlane dengan Nginx di Debian 9

  2. Cara Menginstal Nginx dengan PHP dan MariaDB (LEMP Stack) di Fedora 31

  3. Cara Menginstal Nginx dengan PHP dan MySQL (LEMP Stack) di Ubuntu 20.04 LTS