ค้นหาเว็บไซต์

วิธีการติดตั้ง Nginx, MariaDB 10, PHP 7 (LEMP Stack) ใน 16.10/16.04


สแต็ก LEMP เป็นตัวย่อซึ่งแสดงถึงกลุ่มของแพ็คเกจ (Linux OS, เว็บเซิร์ฟเวอร์ Nginx, ฐานข้อมูล MySQL\MariaDB และภาษาการเขียนโปรแกรมแบบไดนามิกฝั่งเซิร์ฟเวอร์ PHP) ซึ่งใช้ในการปรับใช้แอปพลิเคชันเว็บแบบไดนามิกและ หน้าเว็บ.

บทช่วยสอนนี้จะแนะนำวิธีการติดตั้ง LEMP Stack ด้วย MariaDB 10, PHP 7 และ HTTP 2.0 รองรับ Nginx บนเซิร์ฟเวอร์/รุ่นเดสก์ท็อป Ubuntu 16.10 และ Ubuntu 16.04

ความต้องการ

  1. การติดตั้ง Ubuntu 16.04 Server Edition [คำแนะนำใช้ได้กับ Ubuntu 16.10]

ขั้นตอนที่ 1: ติดตั้งเว็บเซิร์ฟเวอร์ Nginx

1. Nginx เป็นเว็บเซิร์ฟเวอร์ที่ทันสมัยและมีประสิทธิภาพด้านทรัพยากร ซึ่งใช้เพื่อแสดงหน้าเว็บแก่ผู้เยี่ยมชมบนอินเทอร์เน็ต เราจะเริ่มต้นด้วยการติดตั้งเว็บเซิร์ฟเวอร์ Nginx จากที่เก็บข้อมูลอย่างเป็นทางการของ Ubuntu โดยใช้บรรทัดคำสั่ง apt

sudo apt-get install nginx

2. ถัดไป ให้ออกคำสั่ง netstat และ systemctl เพื่อยืนยันว่า Nginx เริ่มทำงานและเชื่อมโยงบนพอร์ต 80 หรือไม่

netstat -tlpn

sudo systemctl status nginx.service

เมื่อคุณได้รับการยืนยันว่าเซิร์ฟเวอร์เริ่มทำงานแล้ว คุณสามารถเปิดเบราว์เซอร์และนำทางไปยังที่อยู่ IP ของเซิร์ฟเวอร์หรือบันทึก DNS โดยใช้โปรโตคอล HTTP เพื่อเยี่ยมชมหน้าเว็บเริ่มต้นของ Nginx

http://IP-Address

ขั้นตอนที่ 2: เปิดใช้งานโปรโตคอล Nginx HTTP/2.0

3. โปรโตคอล HTTP/2.0 ซึ่งสร้างตามค่าเริ่มต้นในไบนารี Nginx รุ่นล่าสุดบน Ubuntu 16.04 ทำงานร่วมกับ SSL และ สัญญาว่าจะปรับปรุงความเร็วอย่างมากในการโหลดหน้าเว็บ SSL

หากต้องการเปิดใช้งานโปรโตคอลใน Nginx บน Ubuntu 16.04 ขั้นแรกให้ไปที่ไฟล์การกำหนดค่าของไซต์ Nginx ที่พร้อมใช้งาน และสำรองไฟล์การกำหนดค่าเริ่มต้นโดยใช้คำสั่งด้านล่าง

cd /etc/nginx/sites-available/
sudo mv default default.backup

4. จากนั้น ใช้โปรแกรมแก้ไขข้อความสร้างหน้าเริ่มต้นใหม่พร้อมคำแนะนำด้านล่าง:

server {
        listen 443 ssl http2 default_server;
        listen [::]:443 ssl http2 default_server;

        root /var/www/html;

        index index.html index.htm index.php;

        server_name 192.168.1.13;

        location / {
                try_files $uri $uri/ =404;
        }

        ssl_certificate /etc/nginx/ssl/nginx.crt;
        ssl_certificate_key /etc/nginx/ssl/nginx.key;

        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
        ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
        ssl_dhparam  /etc/nginx/ssl/dhparam.pem;
        ssl_session_cache shared:SSL:20m;
        ssl_session_timeout 180m;
        resolver 8.8.8.8 8.8.4.4;
        add_header Strict-Transport-Security "max-age=31536000;
        #includeSubDomains" always;


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

        location ~ /\.ht {
                deny all;
        }

}

server {
       listen         80;
       listen    [::]:80;
       server_name    192.168.1.13;
       return         301 https://$server_name$request_uri;
}

ข้อมูลโค้ดการกำหนดค่าข้างต้นทำให้สามารถใช้ HTTP/2.0 โดยการเพิ่มพารามิเตอร์ http2 ลงในคำสั่ง Listening SSL ทั้งหมด

นอกจากนี้ ส่วนสุดท้ายของข้อความที่ตัดตอนมาในคำสั่งเซิร์ฟเวอร์ยังใช้เพื่อเปลี่ยนเส้นทางการรับส่งข้อมูลที่ไม่ใช่ SSL ทั้งหมดไปยังโฮสต์เริ่มต้น SSL/TLS นอกจากนี้ ให้แทนที่คำสั่ง server_name เพื่อให้ตรงกับที่อยู่ IP หรือบันทึก DNS ของคุณเอง (ควรเป็น FQDN)

5. เมื่อคุณแก้ไขไฟล์การกำหนดค่าเริ่มต้นของ Nginx ด้วยการตั้งค่าข้างต้นเสร็จแล้ว ให้สร้างและแสดงรายการไฟล์ใบรับรอง SSL และคีย์โดยดำเนินการคำสั่งด้านล่าง

กรอกใบรับรองด้วยการตั้งค่าที่คุณกำหนดเอง และให้ความสำคัญกับการตั้งค่า ชื่อทั่วไป เพื่อให้ตรงกับบันทึก DNS FQDN ของคุณหรือที่อยู่ IP ของเซิร์ฟเวอร์ของคุณที่จะใช้ในการเข้าถึงหน้าเว็บ

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

6. นอกจากนี้ ให้สร้าง DH cypher ที่แข็งแกร่ง ซึ่งถูกเปลี่ยนแปลงในไฟล์การกำหนดค่าด้านบนในบรรทัดคำสั่ง ssl_dhparam โดยการออกคำสั่งด้านล่าง:

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

7. เมื่อสร้างคีย์ Diffie-Hellman แล้ว ให้ตรวจสอบว่าไฟล์การกำหนดค่า Nginx ถูกเขียนอย่างถูกต้องและสามารถใช้งานได้โดยเว็บเซิร์ฟเวอร์ Nginx และรีสตาร์ท daemon เพื่อให้สอดคล้องกับการเปลี่ยนแปลงโดย รันคำสั่งด้านล่าง

sudo nginx -t
sudo systemctl restart nginx.service

8. เพื่อทดสอบว่า Nginx ใช้โปรโตคอล HTTP/2.0 หรือไม่ ให้ทำตามคำสั่งด้านล่าง การมีอยู่ของโปรโตคอลที่โฆษณา h2 เป็นการยืนยันว่า Nginx ได้รับการกำหนดค่าให้ใช้โปรโตคอล HTTP/2.0 เรียบร้อยแล้ว เบราว์เซอร์ที่ทันสมัยทั้งหมดควรสนับสนุนโปรโตคอลนี้ตามค่าเริ่มต้น

openssl s_client -connect localhost:443 -nextprotoneg ''

ขั้นตอนที่ 3: ติดตั้งล่าม PHP 7

Nginx สามารถใช้กับล่ามภาษาประมวลผลแบบไดนามิก PHP เพื่อสร้างเนื้อหาเว็บแบบไดนามิกด้วยความช่วยเหลือของตัวจัดการกระบวนการ FastCGI ที่ได้รับโดยการติดตั้งแพ็คเกจไบนารี php-fpm จากที่เก็บอย่างเป็นทางการของ Ubuntu

9. เพื่อที่จะคว้า PHP7.0 และแพ็คเกจเพิ่มเติมที่จะช่วยให้ PHP สามารถสื่อสารกับเว็บเซิร์ฟเวอร์ Nginx ได้ ให้ออกคำสั่งด้านล่างบนคอนโซลเซิร์ฟเวอร์ของคุณ:

sudo apt install php7.0 php7.0-fpm 

10. เมื่อติดตั้งล่าม PHP7.0 บนเครื่องของคุณสำเร็จแล้ว ให้เริ่มต้นและตรวจสอบ php7.0-fpm daemon โดยออกคำสั่งด้านล่าง สั่งการ:

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

11. ไฟล์การกำหนดค่าปัจจุบันของ Nginx ได้รับการกำหนดค่าให้ใช้ตัวจัดการกระบวนการ PHP FastCGI เพื่อเซิร์ฟเวอร์เนื้อหาแบบไดนามิก

บล็อกเซิร์ฟเวอร์ที่ทำให้ Nginx สามารถใช้ล่าม PHP ได้แสดงไว้ในข้อความที่ตัดตอนมาด้านล่าง ดังนั้นจึงไม่จำเป็นต้องแก้ไขไฟล์การกำหนดค่าเริ่มต้นของ Nginx เพิ่มเติม

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

ด้านล่างนี้คือภาพหน้าจอของคำแนะนำที่คุณต้องไม่แสดงข้อคิดเห็นและแก้ไขในกรณีของไฟล์การกำหนดค่าเริ่มต้น Nginx ดั้งเดิม

12. เพื่อทดสอบความสัมพันธ์ของเว็บเซิร์ฟเวอร์ Nginx กับตัวจัดการกระบวนการ PHP FastCGI ให้สร้างไฟล์การกำหนดค่าทดสอบ PHP info.php โดยใช้คำสั่งด้านล่างและตรวจสอบการตั้งค่าโดยไปที่ไฟล์การกำหนดค่านี้ โดยใช้ที่อยู่ด้านล่าง: http://IP_or domain/info.php

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

นอกจากนี้ ให้ตรวจสอบด้วยว่าเซิร์ฟเวอร์โฆษณาโปรโตคอล HTTP/2.0 โดยค้นหาบรรทัด $_SERVER['SERVER_PROTOCOL'] บนบล็อกตัวแปร PHP ดังที่แสดงในภาพหน้าจอด้านล่าง

13. ในการติดตั้งโมดูล PHP7.0 เพิ่มเติม ให้ใช้คำสั่ง apt search php7.0 เพื่อค้นหาโมดูล PHP และติดตั้ง

นอกจากนี้ ให้ลองติดตั้งโมดูล PHP ต่อไปนี้ซึ่งมีประโยชน์ในกรณีที่คุณวางแผนที่จะติดตั้ง WordPress หรือ CMS อื่น ๆ

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

14. หากต้องการลงทะเบียนโมดูลเสริม PHP เพียงรีสตาร์ท PHP-FPM daemon โดยใช้คำสั่งด้านล่าง

sudo systemctl restart php7.0-fpm.service

ขั้นตอนที่ 4: ติดตั้งฐานข้อมูล MariaDB

15. สุดท้ายนี้ เพื่อให้สแต็ก LEMP ของเราสมบูรณ์ เราจำเป็นต้องมีส่วนประกอบฐานข้อมูล MariaDB เพื่อจัดเก็บและจัดการข้อมูลเว็บไซต์

ติดตั้งระบบการจัดการฐานข้อมูล MariaDB โดยการรันคำสั่งด้านล่างและเริ่มบริการ PHP-FPM ใหม่เพื่อใช้โมดูล MySQL เพื่อเข้าถึงฐานข้อมูล

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

16. เพื่อรักษาความปลอดภัยการติดตั้ง MariaDB ให้เรียกใช้สคริปต์ความปลอดภัยที่ได้รับจากแพ็คเกจไบนารีจากที่เก็บ Ubuntu ซึ่งจะขอให้คุณตั้งรหัสผ่านรูท ลบผู้ใช้ที่ไม่ระบุชื่อ ปิดการใช้งานการเข้าสู่ระบบรูทจากระยะไกล และลบฐานข้อมูลทดสอบ

เรียกใช้สคริปต์โดยใช้คำสั่งด้านล่างและตอบคำถามทั้งหมดด้วย yes ใช้ภาพหน้าจอด้านล่างเป็นแนวทาง

sudo mysql_secure_installation

17. หากต้องการกำหนดค่า MariaDB เพื่อให้ผู้ใช้ทั่วไปสามารถเข้าถึงฐานข้อมูลได้โดยไม่ต้องมีสิทธิ์ sudo ของระบบ ให้ไปที่อินเทอร์เฟซบรรทัดคำสั่ง MySQL ที่มีสิทธิ์ใช้งานรูท และเรียกใช้คำสั่งด้านล่างบนตัวแปล MySQL:

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

สุดท้าย ล็อกอินเข้าสู่ฐานข้อมูล MariaDB และรันคำสั่งที่กำหนดเองโดยไม่มีสิทธิ์รูทโดยดำเนินการคำสั่งด้านล่าง:

mysql -u root -p -e 'show databases'

นั่นคือทั้งหมด! ขณะนี้ คุณมีสแต็ก LEMP ที่กำหนดค่าไว้บนเซิร์ฟเวอร์ Ubuntu 16.10 และ Ubuntu 16.04 ที่ช่วยให้คุณสามารถปรับใช้เว็บแอปพลิเคชันไดนามิกที่ซับซ้อนซึ่งสามารถโต้ตอบกับฐานข้อมูลได้