GNU/Linux >> Belajar Linux >  >> Ubuntu

Menginstal Nginx dengan PHP dan MariaDB (sebagai pengganti MySQL) - LEMP -di Ubuntu 15.10 (Wiley Werewolf)

Nginx (diucapkan "engine x") adalah server HTTP gratis, open-source, berkinerja tinggi. Nginx dikenal dengan stabilitasnya, rangkaian fitur yang kaya, konfigurasi sederhana, dan konsumsi sumber daya yang rendah. Tutorial ini menunjukkan bagaimana Anda dapat menginstal Nginx di server Ubuntu 15.10 dengan dukungan PHP (melalui PHP-FPM) dan MariaDB (sebagai pengganti MySQL). Istilah LEMP  singkatan dari:Linux + Nginx + MySQL + PHP.

1 Catatan Awal

Dalam tutorial ini, saya akan menggunakan hostname server1.example.com dengan alamat IP 192.168.1.100. Setelan ini mungkin berbeda untuk Anda, jadi Anda harus menggantinya jika perlu.

2 Memasang MariaDB

Saya akan menginstal MariaDB daripada MySQL, MariaDB adalah garpu MySQL yang dikelola oleh pendiri MySQL asli Monty Widenius yang memiliki beberapa peningkatan kecepatan dan fitur dibandingkan dengan MySQL. Untuk menginstal MariaDB, jalankan:

sudo apt-get -y install mariadb-server mariadb-client

MariaDB saat ini tidak memiliki kata sandi yang disetel untuk pengguna root. Jalankan perintah mysql_secure_installation untuk mengonfigurasi kata sandi dan menghapus database pengujian.

sudo mysql_secure_installation

Anda akan ditanyai pertanyaan berikut:

Enter current password for root (enter for none): <-- press enter
Set root password? [Y/n] <-- y
New password: <-- Enter the new MariaDB root password here
Re-enter new password: <-- Repeat the password
Remove anonymous users? [Y/n] <-- y
Disallow root login remotely? [Y/n] <-- y
Reload privilege tables now? [Y/n] <-- y

3 Menginstal Nginx

Nginx tersedia sebagai paket untuk Ubuntu 15.10. Mungkin server web apache diinstal di server Anda dan ini dapat menyebabkan konflik. Periksa apakah apache tidak berjalan:

ps aux | grep apache2

Jika perintah ini tidak memberikan hasil apa pun, lanjutkan dengan instalasi Nginx.

Hapus apache jika perintah di atas menunjukkan beberapa proses apache dengan perintah berikut:

sudo systemctl stop apache2.service
sudo systemctl disable apache2.service
sudo apt-get remove apache2

Sekarang kita dapat menginstal nginx.

sudo apt-get install nginx

Mulai Nginx sesudahnya:

sudo systemctl start nginx.service
sudo systemctl enable nginx.service

Ketik alamat IP atau nama host server web Anda ke dalam browser (mis. http://192.168.1.100), dan Anda akan melihat halaman berikut:

Mengapa itu menunjukkan "Apache2" alih-alih Nginx di halaman itu? Teks halaman tidak mencerminkan server web yang sebenarnya berjalan, halaman di atas hanyalah halaman default di Ubuntu di root dokumen /var/www/html/ yang digunakan oleh Apache dan Nginx. Untuk memverifikasi bahwa Nginx benar-benar menyajikan halaman ini, Anda dapat melihat header HTTP di konsol analisis Jaringan Firefox:

Atau Anda memeriksa shell yang menjalankan nginx:

ps aux | grep nginx

Hasilnya akan menunjukkan proses nginx seperti ini:

4 Menginstal PHP5

Kita dapat membuat PHP5 bekerja di Nginx melalui PHP-FPM. PHP-FPM (FastCGI Process Manager) adalah implementasi PHP FastCGI alternatif dengan beberapa fitur tambahan yang berguna untuk situs dari berbagai ukuran, terutama situs yang lebih sibuk) yang kami instal sebagai berikut:

sudo apt-get install php5-fpm

PHP-FPM adalah proses daemon (dengan skrip init php5-fpm) yang menjalankan server FastCGI pada soket /var/run/php5-fpm.sock.

5 Konfigurasi Nginx

Konfigurasi Nginx ada di file /etc/nginx/nginx.conf yang sekarang kita buka di editor nano:

sudo nano /etc/nginx/nginx.conf

Konfigurasinya mudah dipahami (Anda dapat mempelajarinya lebih lanjut di sini:http://wiki.nginx.org/NginxFullExample dan di sini:http://wiki.nginx.org/NginxFullExample2)

Pertama (ini opsional) setel keepalive_timeout ke nilai yang wajar:

[...]
    keepalive_timeout   2;
[...]

Host virtual didefinisikan dalam kontainer {} server. Vhost default didefinisikan dalam file /etc/nginx/sites-available/default - mari kita ubah sebagai berikut:

sudo nano /etc/nginx/sites-available/default
##
# You should look at the following URL's in order to grasp a solid understanding
# of Nginx configuration files in order to fully unleash the power of Nginx.
# http://wiki.nginx.org/Pitfalls
# http://wiki.nginx.org/QuickStart
# http://wiki.nginx.org/Configuration
#
# Generally, you will want to move this file somewhere, and start with a clean
# file but keep this around for reference. Or just disable in sites-enabled.
#
# Please see /usr/share/doc/nginx-doc/examples/ for more detailed examples.
##

# Default server configuration
#
server {
listen 80 default_server;
listen [::]:80 default_server;

# SSL configuration
#
# listen 443 ssl default_server;
# listen [::]:443 ssl default_server;
#
# Note: You should disable gzip for SSL traffic.
# See: https://bugs.debian.org/773332
#
# Read up on ssl_ciphers to ensure a secure configuration.
# See: https://bugs.debian.org/765782
#
# Self signed certs generated by the ssl-cert package
# Don't use them in a production server!
#
# include snippets/snakeoil.conf;

root /var/www/html;

# Add index.php to the list if you are using PHP
index index.php index.html index.htm index.nginx-debian.html;

server_name _;

location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
}

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
include snippets/fastcgi-php.conf;

# With php5-cgi alone:
# fastcgi_pass 127.0.0.1:9000;
# With php5-fpm:
fastcgi_pass unix:/var/run/php5-fpm.sock;
}

# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}


# Virtual Host configuration for example.com
#
# You can move that to a different file under sites-available/ and symlink that
# to sites-enabled/ to enable it.
#
#server {
# listen 80;
# listen [::]:80;
#
# server_name example.com;
#
# root /var/www/example.com;
# index index.html;
#
# location / {
# try_files $uri $uri/ =404;
# }
#}

nama server _; menjadikannya vhost catchall default (tentu saja, Anda juga dapat menentukan nama host di sini seperti www.example.com).

Saya telah menambahkan index.php ke baris indeks. root /usr/share/nginx/html; berarti root dokumen adalah direktori /usr/share/nginx/html.

Bagian penting untuk PHP adalah lokasi ~ \.php$ {} bait. Batalkan komentar untuk mengaktifkannya. Harap dicatat bahwa penting untuk mengaktifkan baris "include snippets/fastcgi-php.conf;" dalam bait lokasi PHP untuk mencegah eksploitasi zero-day (lihat http://wiki.nginx.org/Pitfalls#Passing_Uncontrolled_Requests_to_PHP dan http://forum.nginx.org/read.php?2,88845,page=3).

Sekarang simpan file dan muat ulang nginx:

sudo service nginx reload

Selanjutnya buka /etc/php5/fpm/php.ini...

sudo nano /etc/php5/fpm/php.ini

... dan atur cgi.fix_pathinfo=0:

[...]
; cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI.  PHP's
; previous behaviour was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to not grok
; what PATH_INFO is.  For more information on PATH_INFO, see the cgi specs.  Setting
; this to 1 will cause PHP CGI to fix its paths to conform to the spec.  A setting
; of zero causes PHP to behave as before.  Default is 1.  You should fix your scripts
; to use SCRIPT_FILENAME rather than PATH_TRANSLATED.
; http://php.net/cgi.fix-pathinfo
cgi.fix_pathinfo=0
[...]

Muat ulang PHP-FPM:

sudo service php5-fpm reload

Sekarang buat file PHP berikut di root dokumen /var/www/html:

sudo nano /var/www/html/info.php
<?php
phpinfo();
?>

Sekarang kita memanggil file itu di browser (mis. http://192.168.1.100/info.php):

Seperti yang Anda lihat, PHP5 bekerja, dan bekerja melalui FPM/FastCGI, seperti yang ditunjukkan pada baris Server API. Jika Anda menggulir lebih jauh ke bawah, Anda akan melihat semua modul yang sudah diaktifkan di PHP5. MySQL tidak terdaftar di sana yang berarti kami belum memiliki dukungan MySQL di PHP5.

6 Mendapatkan Dukungan MariaDB / MySQL di PHP

Untuk mendapatkan dukungan MySQL di PHP, kita dapat menginstal paket php5-mysqlnd. Ini adalah ide yang baik untuk menginstal beberapa modul PHP5 lainnya serta Anda mungkin membutuhkannya untuk aplikasi Anda. Anda dapat mencari modul PHP5 yang tersedia seperti ini:

apt-cache search php5

Pilih yang Anda butuhkan dan instal seperti ini:

sudo apt-get install php5-mysqlnd php5-curl php5-gd php5-intl php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-ming php5-ps php5-pspell php5-recode php5-sqlite php5-tidy php5-xmlrpc php5-xsl

APCu adalah cacher opcode PHP gratis untuk menyimpan dan mengoptimalkan kode perantara PHP. Ini mirip dengan cacher opcode PHP lainnya, seperti eAccelerator dan Xcache. Sangat disarankan untuk menginstal salah satu dari ini untuk mempercepat halaman PHP Anda.

APC dapat diinstal sebagai berikut:

sudo apt-get install php5-apcu

Sekarang muat ulang PHP-FPM:

sudo service php5-fpm reload

Sekarang muat ulang http://192.168.1.100/info.php di browser Anda dan gulir ke bawah ke bagian modul lagi. Anda sekarang akan menemukan banyak modul baru di sana, termasuk modul MySQL:

7 Membuat PHP-FPM menggunakan Koneksi TCP

Secara default PHP-FPM mendengarkan pada soket /var/run/php5-fpm.sock. Dimungkinkan juga untuk membuat PHP-FPM menggunakan koneksi TCP. Untuk melakukannya, buka /etc/php5/fpm/pool.d/www.conf...

sudo nano /etc/php5/fpm/pool.d/www.conf

... dan buat garis dengar terlihat sebagai berikut:

[...]
;listen = /var/run/php5-fpm.sock
listen = 127.0.0.1:9000
[...]

Ini akan membuat PHP-FPM mendengarkan pada port 9000 pada IP 127.0.0.1 (localhost). Pastikan Anda menggunakan port yang tidak digunakan di sistem Anda.

Kemudian muat ulang PHP-FPM:

sudo php5-fpm reload

Selanjutnya buka konfigurasi nginx Anda dan semua vhost Anda dan ubah baris fastcgi_pass unix:/var/run/php5-fpm.sock; ke fastcgi_pass 127.0.0.1:9000;, mis. seperti ini:

sudo nano /etc/nginx/sites-available/default
[...]
 
location ~ \.php$ {
include snippets/fastcgi-php.conf;

# With php5-cgi alone:
fastcgi_pass 127.0.0.1:9000;
# With php5-fpm:
# fastcgi_pass unix:/var/run/php5-fpm.sock;
}
[...]

Akhirnya muat ulang nginx:

sudo service nginx reload

8 Unduhan gambar mesin virtual dari tutorial ini

Tutorial ini tersedia sebagai image mesin virtual siap pakai dalam format ovf/ova, kompatibel dengan VMWare dan Virtualbox. Gambar mesin virtual menggunakan detail login berikut:

Masuk SSH / Shell

Nama pengguna:administrator
Kata sandi:howtoforge

Pengguna ini memiliki hak sudo.

Masuk MariaDB

Nama pengguna:root
Kata sandi:howtoforge

IP VM adalah 192.168.1.100, dapat diubah di file /etc/network/interfaces. Harap ubah semua kata sandi di atas untuk mengamankan mesin virtual.

  • nginx:http://nginx.net/
  • nginx Wiki:http://wiki.codemongers.com/Main
  • PHP:http://www.php.net/
  • PHP-FPM:http://php-fpm.org/
  • MySQL:http://www.mysql.com/
  • Ubuntu:http://www.ubuntu.com/


Ubuntu
  1. Menginstal Nginx di Ubuntu 14.04 dan 16.04

  2. Menginstal Nginx Dengan PHP5 (Dan PHP-FPM) Dan Dukungan MySQL (LEMP) Di Ubuntu 14.04 LTS

  3. Menginstal dan mengatur Php dan Nginx di Ubuntu 20.04

  1. Tutorial server LAMP Ubuntu 14.10 dengan Apache 2, PHP 5 dan MySQL (MariaDB)

  2. Tutorial server LAMP Ubuntu 15.04 dengan Apache 2, PHP 5 dan MariaDB (bukan MySQL)

  3. Tutorial server LAMP Ubuntu 15.10 dengan Apache 2.4, PHP 5 dan MariaDB (bukan MySQL)

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

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

  3. Menginstal Nginx Dengan PHP5 (Dan PHP-FPM) Dan Dukungan MySQL (LEMP) Di Ubuntu 12.04 LTS