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

Cara Instal Nginx dengan PHP dan MySQL (LEMP Stack) di CentOS 7.6

Tutorial ini menunjukkan bagaimana Anda dapat menginstal Nginx di server CentOS 7 dengan dukungan PHP (melalui PHP-FPM) dan dukungan MySQL (MariaDB).

Apa itu LEMP?

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.

Prasyarat LEMP

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.

Saya akan menggunakan editor nano dalam tutorial ini untuk mengedit file konfigurasi. Nano bisa dipasang seperti ini.

yum -y install nano

Saya sarankan menginstal firewall. Jika Anda belum menginstal firewalld dan ingin menggunakan firewall, maka instal dengan perintah berikut:

yum -y install firewalld

mulai firewall dan aktifkan untuk dimulai saat boot.

systemctl start firewalld.service
systemctl aktifkan firewalld.service

Selanjutnya, buka port SSH Anda untuk memastikan bahwa Anda dapat terhubung ke server dengan SSH.

firewall-cmd --permanent --zone=public --add-service=ssh
firewall-cmd --reload

Mengaktifkan Repositori CentOS Tambahan

Nginx terbaru tidak tersedia dari repositori CentOS resmi, jadi kami menyertakan repositori proyek Nginx untuk menginstalnya:

nano /etc/yum.repos.d/nginx.repo
[nginx]name=nginx repobaseurl=http://nginx.org/packages/centos/$releasever/$basearch/gpgcheck=0enabled=1

Menginstal MySQL (MariaDB)

Pertama, kita install MariaDB sebagai pengganti MySQL. MariaDB adalah garpu gratis dari MySQL. Jalankan perintah ini pada shell untuk menginstal server database MariaDB:

yum -y install mariadb mariadb-server net-tools

Kemudian kita membuat link startup sistem untuk MariaDB (sehingga dimulai secara otomatis setiap kali sistem boot) dan memulai server MariaDB:

systemctl aktifkan mariadb.service
systemctl start mariadb.service

Sekarang periksa apakah jaringan diaktifkan. Harap dicatat bahwa layanan MraiDB diberi nama mysql karena merupakan server database yang kompatibel. Jalankan

netstat -ketuk | grep mysql

Seharusnya menunjukkan sesuatu seperti ini:

[[email protected] ~]# netstat -tap | grep mysql
tcp 0 0 0.0.0.0:mysql 0.0.0.0:* DENGARKAN 19842/mysqld 

Jalankan:

mysql_secure_installation

untuk menetapkan kata sandi untuk root pengguna (jika tidak, siapa pun dapat mengakses database MySQL Anda!):

[[email protected] ~]# mysql_secure_installation
/usr/bin/mysql_secure_installation:baris 379:find_mysql_client:perintah tidak ditemukan
CATATAN:MENJALANKAN SEMUA BAGIAN SKRIP INI DIREKOMENDASIKAN UNTUK SEMUA SERVER MariaDB
PADA PENGGUNAAN PRODUKSI! HARAP BACA SETIAP LANGKAH DENGAN SEKSAMA!
Untuk masuk ke MariaDB untuk mengamankannya, kita memerlukan kata sandi
saat ini untuk pengguna root. Jika Anda baru saja menginstal MariaDB, dan
Anda belum mengatur kata sandi root, kata sandi akan kosong,
jadi Anda cukup menekan enter di sini.
Masukkan kata sandi saat ini untuk root (masukkan untuk tidak ada):
Oke, kata sandi berhasil digunakan, lanjutkan...
Menyetel kata sandi root memastikan bahwa tidak ada yang bisa masuk ke MariaDB
pengguna root tanpa otorisasi yang tepat.
Tetapkan kata sandi root? [Y/n] <-- ENTER
Sandi baru:<-- yourrootsqlpassword
Masukkan ulang sandi baru:<-- yourrootsqlpassword
Sandi berhasil diperbarui!
Memuat ulang tabel hak istimewa. .
... Sukses!
Secara default, instalasi MariaDB memiliki pengguna anonim, memungkinkan siapa saja
untuk masuk ke MariaDB tanpa harus membuat akun pengguna untuk
mereka. Ini dimaksudkan hanya untuk pengujian, dan untuk membuat penginstalan
berjalan sedikit lebih lancar. Anda harus menghapusnya sebelum pindah ke
lingkungan produksi.
Hapus pengguna anonim? [Y/n] <-- ENTER
... Berhasil!
Biasanya, root hanya diperbolehkan untuk terhubung dari 'localhost'. Ini
memastikan bahwa seseorang tidak dapat menebak kata sandi root dari jaringan.
Larang login root dari jarak jauh? [Y/n] <-- ENTER
... Berhasil!
Secara default, MariaDB hadir dengan database bernama 'test' yang dapat
akses siapa saja. Ini juga dimaksudkan hanya untuk pengujian, dan harus dihapus
sebelum pindah ke lingkungan produksi.
Hapus database pengujian dan akses ke sana? [Y/n] <-- ENTER
- Menghapus database pengujian...
... Berhasil!
- Menghapus hak istimewa pada database pengujian...
... Berhasil !
Memuat ulang tabel hak istimewa akan memastikan bahwa semua perubahan yang dibuat sejauh ini
akan segera berlaku.
Muat ulang tabel hak istimewa sekarang? [Y/n] <-- ENTER
... Berhasil!
Membersihkan...
Semua selesai! Jika Anda telah menyelesaikan semua langkah di atas, penginstalan MariaDB
Anda sekarang akan aman.
Terima kasih telah menggunakan MariaDB!
[[email protected] ~]#

[[email protected] ~]# mysql_secure_installation

Menginstal Nginx

Nginx tersedia sebagai paket dari nginx.org yang dapat kita instal seperti ini:

yum -y install nginx

Kemudian kami membuat tautan startup sistem untuk nginx dan memulainya:

systemctl aktifkan nginx.service
systemctl start nginx.service

Ada kemungkinan error port 80 sudah digunakan, pesan errornya seperti ini:

[[email protected] ~]# service nginx start
Memulai nginx:nginx:[emerg] bind() hingga 0.0.0.0:80 gagal (98:Alamat sudah digunakan)
nginx:[emerg] bind() hingga 0.0.0.0:80 gagal (98:Alamat sudah digunakan)
nginx:[emerg] bind() hingga 0.0.0.0:80 gagal (98:Alamat sudah digunakan)
nginx:[emerg] bind() hingga 0.0.0.0:80 gagal (98:Alamat sudah digunakan)
nginx:[emerg] bind() hingga 0.0.0.0:80 gagal (98:Alamat sudah masuk gunakan)
nginx:[emerg] masih tidak dapat mengikat()
                                                 [GAGAL]
[]# Ini berarti bahwa server web lain (mungkin Apache) sudah berjalan di server ini. Hentikan layanan Apache dan kemudian mulai layanan untuk NGINX:

systemctl stop httpd.service
yum hapus httpd
systemctl nonaktifkan httpd.service

Kemudian coba mulai Nginx lagi.

systemctl start nginx.service

Buka port HTTP dan HTTPS di firewall

firewall-cmd --permanent --zone=public --add-service=http
firewall-cmd --permanent --zone=public --add-service=https
firewall-cmd --reload

Output yang dihasilkan pada shell akan terlihat seperti ini:

[[email protected] ~]# firewall-cmd --permanent --zone=public --add-service=http
sukses
[[email protected] ~]# firewall-cmd - -permanent --zone=public --add-service=https
sukses
[[email protected] ~]# firewall-cmd --reload
sukses
[[email protected] ] ~]#

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

Menginstal PHP

Kita dapat membuat PHP 5 bekerja dengan Nginx melalui PHP-FPM (FastCGI Process Manager). PHP-FPM adalah implementasi PHP FastCGI alternatif dengan beberapa fitur tambahan yang berguna untuk situs dari berbagai ukuran, terutama situs yang lebih sibuk. Kita dapat menginstal php-fpm bersama dengan php-cli dan beberapa modul PHP5 seperti php-mysql yang Anda perlukan jika Anda ingin menggunakan MySQL dari skrip PHP Anda sebagai berikut:

yum -y install php-fpm php-cli php-mysql php-gd php-ldap php-odbc php-pdo php-pecl-memcache php-pear php-mbstring php-xml php-xmlrpc php-mbstring php- snmp php-soap

APC adalah cacher opcode PHP gratis dan terbuka 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.

Saya akan menginstal APC dari repositori pecl PHP. PECL membutuhkan alat Pengembangan Centos untuk diinstal untuk mengkompilasi paket APC.

yum -y install php-devel
yum -y groupinstall 'Alat Pengembangan'

dan instal APC:

pecl install apc
[[email protected] ~]# pecl install apc
mengunduh APC-3.1.13.tgz ...
Mulai mengunduh APC-3.1.13.tgz (171.591 byte)
..................selesai:171.591 byte
55 file sumber, membangun
menjalankan:phpize
Mengonfigurasi untuk:
PHP Versi Api:20100412
Zend Module Api No:20100525
Zend Extension Api No:220100525
Aktifkan debugging internal di APC [no] :<-- ENTER
Aktifkan info file per permintaan tentang file yang digunakan dari cache APC [no] :<-- ENTER
Aktifkan spin lock (EXPERIMENTAL) [no] :<-- ENTER
Aktifkan proteksi memori (EXPERIMENTAL) [no] :<-- ENTER
Aktifkan pthread mutexes (default) [no] :<-- ENTER
Aktifkan kunci baca/tulis pthread (EKSPERIMENTAL) [ya] :<-- ENTER
membangun /var/tmp /pear-build-rootVrjsuq/APC-3.1.13
......

Kemudian buka /etc/php.ini dan atur cgi.fix_pathinfo=0:

nano /etc/php.ini
[...]; cgi.fix_pathinfo memberikan dukungan *real* PATH_INFO/PATH_TRANSLATED untuk CGI. PHP; perilaku sebelumnya adalah menyetel PATH_TRANSLATED ke SCRIPT_FILENAME, dan bukan grok; apa PATH_INFO itu. Untuk informasi lebih lanjut tentang PATH_INFO, lihat spesifikasi cgi. Pengaturan; ini ke 1 akan menyebabkan PHP CGI memperbaiki jalurnya agar sesuai dengan spesifikasi. Sebuah pengaturan; dari nol menyebabkan PHP berperilaku seperti sebelumnya. Standarnya adalah 1. Anda harus memperbaiki skrip Anda; untuk menggunakan SCRIPT_FILENAME daripada PATH_TRANSLATED.; http://www.php.net/manual/en/ini.core.php#ini.cgi.fix-pathinfocgi.fix_pathinfo=0[...]

(Silakan baca http://wiki.nginx.org/Pitfalls untuk mengetahui mengapa Anda harus melakukan ini.)

dan tambahkan baris:

[...]extension=apc.so

di akhir file /etc/php.ini.

Selain itu, untuk menghindari kesalahan zona waktu seperti

[28-Juni-2016 14:21:01] PHP Peringatan:phpinfo():Tidak aman untuk mengandalkan pengaturan zona waktu sistem. Anda *diwajibkan* untuk menggunakan pengaturan date.timezone atau fungsi date_default_timezone_set(). Jika Anda menggunakan salah satu metode tersebut dan Anda masih mendapatkan peringatan ini, kemungkinan besar Anda salah mengeja pengidentifikasi zona waktu. Kami memilih 'Europe/Berlin' untuk 'CEST/2.0/DST' sebagai gantinya di /usr/share/nginx/html/info.php on line 2

... di /var/log/php-fpm/www-error.log ketika Anda memanggil skrip PHP di browser Anda, Anda harus mengatur date.timezone di /etc/php.ini:

[...][Tanggal]; Mendefinisikan zona waktu default yang digunakan oleh fungsi tanggal; http://www.php.net/manual/en/datetime.configuration.php#ini.date.timezonedate.timezone ="Europe/Berlin"[...]

Anda dapat mengetahui zona waktu yang tepat untuk sistem Anda dengan menjalankan:

cat /etc/sysconfig/clock

[[email protected] nginx]# cat /etc/sysconfig/clock
ZONE="Europe/Berlin"
[[email protected] nginx]#

Selanjutnya, buat tautan startup sistem untuk php-fpm dan mulai:

systemctl aktifkan php-fpm.service
systemctl start php-fpm.service

PHP-FPM adalah proses daemon (dengan skrip init /etc/init.d/php-fpm) yang menjalankan server FastCGI pada port 9000.

Mengonfigurasi Nginx

Konfigurasi nginx ada di /etc/nginx/nginx.conf yang kita buka sekarang:

nano /etc/nginx/nginx.conf

Pertama (ini opsional) Anda dapat menambah jumlah proses pekerja dan menyetel keepalive_timeout ke nilai yang wajar:

[...]worker_processes 4;[...] keepalive_timeout 2;[...]

Host virtual didefinisikan dalam wadah {} server di direktori /etc/nginx/conf.d. Mari kita ubah vhost default (di /etc/nginx/conf.d/default.conf) sebagai berikut:

nano /etc/nginx/conf.d/default.conf
[...]server { mendengarkan 80; nama_server localhost; #charset koi8-r; #access_log /var/log/nginx/log/host.access.log main; lokasi / { root /usr/share/nginx/html; index index.html index.htm index.php; } #error_page 404 /404.html; # redirect halaman error server ke halaman statis /50x.html # error_page 500 502 503 504 /50x.html; lokasi =/50x.html { root /usr/share/nginx/html; } # proxy skrip PHP untuk mendengarkan Apache di 127.0.0.1:80 # #location ~ \.php$ { # proxy_pass http://127.0.0.1; #} # meneruskan skrip PHP ke server FastCGI yang mendengarkan di 127.0.0.1:9000 # lokasi ~ \.php$ { root /usr/share/nginx/html; try_files $uri =404; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; termasuk fastcgi_params; } # menolak akses ke file .htaccess, jika root dokumen Apache # setuju dengan salah satu # lokasi nginx ~ /\.ht { tolak semua; }}

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

Di lokasi / bagian, 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. Ubah baris root ke root dokumen situs web (mis. root /usr/share/nginx/html;). Harap perhatikan bahwa saya telah menambahkan baris try_files $uri =404; 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). Harap pastikan bahwa Anda mengubah baris fastcgi_param menjadi fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; karena jika tidak, interpreter PHP tidak akan menemukan skrip PHP yang Anda panggil di browser Anda ($document_root diterjemahkan ke /usr/share/nginx/html karena itulah yang telah kami tetapkan sebagai root dokumen kami).

PHP-FPM mendengarkan pada port 9000 pada 127.0.0.1 secara default, oleh karena itu kami memberi tahu Nginx untuk terhubung ke 127.0.0.1:9000 dengan baris fastcgi_pass 127.0.0.1:9000;. Hal ini juga memungkinkan untuk membuat PHP-FPM menggunakan soket Unix - saya akan menjelaskan ini di bab 7.

Sekarang simpan file dan muat ulang Nginx:

systemctl restart nginx.service

Sekarang buat file PHP berikut di root dokumen /usr/share/nginx/html...

nano /usr/share/nginx/html/info.php

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

Seperti yang Anda lihat, PHP 5 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, termasuk modul MySQL:

Membuat PHP-FPM menggunakan Unix Socket

Secara default, PHP-FPM mendengarkan pada port 9000 pada 127.0.0.1. Dimungkinkan juga untuk membuat PHP-FPM menggunakan soket Unix yang menghindari overhead TCP. Untuk melakukannya, buka /etc/php-fpm.d/www.conf...

nano /etc/php-fpm.d/www.conf

... dan buat garis dengar terlihat sebagai berikut:

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

Kemudian muat ulang PHP-FPM:

systemctl restart php-fpm.service

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

vi /etc/nginx/conf.d/default.conf
[...] lokasi ~ \.php$ { root /usr/share/nginx/html; try_files $uri =404; fastcgi_pass unix:/var/run/php-fpm/php5-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; termasuk fastcgi_params; }[...]

Terakhir, muat ulang Nginx:

systemctl restart nginx.service

Unduh server CentOS 7 ini sebagai mesin virtual

Pengaturan ini tersedia sebagai unduhan mesin virtual dalam format ova/ovf (kompatibel dengan VMWare dan Virtualbox) untuk pelanggan howtoforge.

Detail login untuk VM

  • Kata sandi root adalah:howtoforge
  • Kata sandi pengguna "administrator" adalah:howtoforge

Harap ubah kedua sandi saat login pertama.

  • Alamat IP VM adalah 192.168.1.100
  • nginx:http://nginx.org/
  • nginx Wiki:http://wiki.nginx.org/
  • PHP:http://www.php.net/
  • PHP-FPM:http://php-fpm.org/
  • MySQL:http://www.mysql.com/
  • CentOS:http://www.centos.org/ 

Cent OS
  1. Cara Menginstal LEMP Stack (Nginx, MySQL, PHP v7) di CentOS 7

  2. Cara Menginstal Nextcloud dengan Nginx dan PHP 7.3 di CentOS 8

  3. Cara Instal Linux, Nginx, MariaDB, PHP (LEMP Stack) di CentOS 7 / RHEL 7

  1. Cara Menginstal ownCloud 9.1 dengan Nginx dan MariaDB di CentOS 7

  2. Cara Instal WordPress dengan HHVM dan Nginx di CentOS 7

  3. Cara Instal Nginx Dengan PHP Dan MySQL (LEMP Stack) Di CentOS 7

  1. Cara Menginstal OwnCloud 8 dengan Nginx dan MariaDB di CentOS 7

  2. Cara menginstal Lighttpd dengan PHP-FPM dan MariaDB di CentOS 7

  3. Cara menginstal Apache, PHP 7.1 dan MySQL di CentOS 7.3 (LAMP)