เรียกใช้ PHP โดยใช้ Nginx บน EC2 (Amazon Linux 2) บน AWS
สวัสดีครับ ครั้งนี้ผมจะมาแนะนำการ เรียกใช้ PHP โดยใช้ Nginx บน EC2 (Amazon Linux 2) เนื่องจากการเรียกใช้ PHP โดยใช้ Nginx จะทำงานได้เร็วกว่าการใช้ Apache นั่นเป็นสาเหตุที่ Nginx เป็นที่นิยมในทุกวันนี้ ซึ่งผมก็จะอธิบายวิธีการตั้งค่าสำหรับการใช้งาน Nginx ร่วมกับ EC2 ครับ ! ไปเริ่มกันเลยครับ
เป้าหมายในการทำ
เมื่อ User ทำการเชื่อมต่อจากเว็บเบราว์เซอร์แล้ว Nginx ก็จะดำเนินการ และเมื่อเริ่มต้นระบบ php-fpm ก็จะทำให้สามารถใช้งาน info.php ได้ครับ ! แต่ถ้าไม่มี php-fpm ก็จะไม่สามารถใช้งาน info.php ได้ครับ
สิ่งที่จะทำในบทความนี้
・Start EC2 Instance
・Install PHP8.0
・Install Nginx
・Install php-fpm
สิ่งที่ต้องมี
ทำการติดตั้ง EC2 Instance สำหรับใช้ในการเชื่อมต่อกับ Nginx โดยทำตามลิงก์ด้านล่างนี้ครับ
! สำหรับผู้ใช้งานที่มีอยู่แล้ว ข้ามขั้นตอนนี้ไปได้เลยครับ
- ตัวอย่างการตั้งค่า EC2 ในบทความนี้
Create Key pairs
Key pairs:
tinnakorn-test
Launch instances
Name and tags
Name:
tinnakorn-test
Application and OS Images (Amazon Machine Image)
Amazon Machine Image (AMI):
Amazon Linux 2 AMI (HVM) - Kernel 5.10, SSD Volume Type
(Default)Instance type
Instance type:
t3a.nano
Key pair (login)
Key pair name - required:
tinnakorn-test
Network settings
Firewall (security groups)
Security group name - required:
tinnakorn-test
Description - required:tinnakorn-test
Inbound security groups rules
Security group rule 1 (TCP, 22, 0.0.0.0/0)
Type:
ssh ▼
| Source type:My IP ▼
| Source:xxx.xxx.x.xxx/32 ✕
Configure storage
1x:
8
GiBgp2 ▼
Root volume (Default)
เพิ่ม HTTP ใน Security Group ของ EC2
เมื่อทำการติดตั้ง EC2 Instance เรียบร้อยแล้ว ให้เพิ่ม HTTP ใน Security Group ของ EC2 เพื่อใช้ในการแสดงผลหน้าเว็บไซต์ครับ
เข้ามาที่หน้า Console EC2 Instance ของเรา เลื่อนลงมาประมาณตรงกลาง เลือกหัวข้อSecurity
และคลิกที่ Security Group ของเราครับ
มาที่หัวข้อInbound rules
และเลือกEdit inbound rules
ครับ
เมื่อเข้ามาที่ Edit inbound rules แล้วทำการตั้งค่าดังนี้:
① คลิกปุ่มAdd rule
แล้วจะมี Security group rule เพิ่มขึ้นมา
② เลือก Type:HTTP ▼
③ เลือก Source:Anywhere-IPv4 ▼
④ คลิกSave rules
จะเห็นว่าตอนนี้มี Security group rule ที่เป็น HTTP เพิ่มขึ้นมาแล้ว การตั้งค่าในส่วนนี้ก็เสร็จเรียบร้อยแล้วครับ
ติดตั้ง PHP8.0 และ Nginx ใน Amazon Linux 2
ติดตั้ง PHP8.0
รันคำสั่งนี้เพื่อติดตั้ง PHP8.0
amazon-linux-extras install -y php8.0
รันคำสั่งนี้เพื่อตรวจสอบ Version PHP8.0
php -v
Output↓↓↓
root@ip-172-31-27-236:~
[root@ip-172-31-27-236 ~]# php -v
PHP 8.0.18 (cli) (built: May 16 2022 19:07:27) ( NTS )
Copyright (c) The PHP Group
Zend Engine v4.0.18, Copyright (c) Zend Technologies
[root@ip-172-31-27-236 ~]#
ติดตั้ง Nginx
รันคำสั่งนี้เพื่อติดตั้ง Nginx
amazon-linux-extras install -y nginx1
รันคำสั่งนี้เพื่อตรวจสอบ Version Nginx
nginx -v
Output↓↓↓
root@ip-172-31-27-236:~
[root@ip-172-31-27-236 ~]# nginx -v
nginx version: nginx/1.20.0
[root@ip-172-31-27-236 ~]#
ตั้งค่าการใช้งาน Nginx
รันคำสั่งนี้เพื่อสร้างโฟลเดอร์ html
mkdir -p /var/www/html
Output↓↓↓
root@ip-172-31-27-236:~
[root@ip-172-31-27-236 ~]# mkdir -p /var/www/html
[root@ip-172-31-27-236 ~]#
รันคำสั่งนี้เพื่อเปิดโหมดการใช้งานขั้นสูงสุดให้กับโฟลเดอร์ html
chmod 777 /var/www/html
Output↓↓↓
root@ip-172-31-27-236:~
[root@ip-172-31-27-236 ~]# chmod 777 /var/www/html
[root@ip-172-31-27-236 ~]#
รันคำสั่งนี้เพื่อเข้ามาหน้าแก้ไขไฟล์ nginx.conf
vi /etc/nginx/nginx.conf
เมื่อเข้ามาที่ไฟล์ nginx.conf แล้วทำการแก้ไขดังนี้:
» กดปุ่มi
ให้คำว่า"/etc/nginx/nginx.conf"
ที่อยู่ด้านล่างซ้ายเปลี่ยนเป็น-- INSERT --
» เลื่อนลงมาด้านล่างจนเจอคำว่าserver
» ค้นหาroot
ใน server และลบ/usr/share/nginx/html;
ออกไป
» Copy Path html ด้านล่างนี้ และนำไปวางใน root แทนที่คำว่า/usr/share/nginx/html;
ที่ลบไปเมื่อสักครู่นี้
/var/www/html;
root@ip-172-31-27-236:~
"...ไม่ได้แสดง Code ส่วนบน..."
# for more information.
include /etc/nginx/conf.d/*.conf;
server {
listen 80;
listen [::]:80;
server_name _;
root /var/www/html; # เปลี่ยนที่อยู่ root ที่นี่
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
error_page 404 /404.html;
location = /404.html {
}
}
"...ไม่ได้แสดง Code ส่วนล่าง..."
-- INSERT -- 48,31 40% # กดปุ่ม i ที่แป้นพิมพ์
เมื่อเปลี่ยนที่อยู่ root เสร็จแล้วทำการ Save ตามนี้:
» กดปุ่มEsc
ให้คำว่า-- INSERT --
ที่อยู่ด้านล่างซ้ายหายไป
» พิมพ์:x
หรือ:wq
+ Enter เพื่อบันทึก
root@ip-172-31-27-236:~
"...ไม่ได้แสดง Code ส่วนบน..."
# for more information.
include /etc/nginx/conf.d/*.conf;
server {
listen 80;
listen [::]:80;
server_name _;
root /var/www/html;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
error_page 404 /404.html;
location = /404.html {
}
}
"...ไม่ได้แสดง Code ส่วนล่าง..."
:x
เริ่มต้นระบบ Nginx
เมื่อเปลี่ยนที่อยู่ root เสร็จแล้วให้ทำการเริ่มต้นระบบ Nginx ตามคำสั่งด้านล่างนี้
systemctl start nginx
รันคำสั่งนี้เพื่อเปิดการใช้งาน Nginx
systemctl enable nginx
ทดสอบหน้าเว็บไซต์โดยรัน Server ผ่าน Nginx
เมื่อทำการเริ่มต้นระบบ Nginx เสร็จแล้วให้เข้าไปที่ path/var/www/html
ตามคำสั่งด้านล่างนี้
cd /var/www/html
รันคำสั่งนี้เพื่อสร้างไฟล์ html เพื่อใช้ในการทดสอบหน้าเว็บไซต์
vi index.html
เมื่อเข้ามาที่ไฟล์ index.html แล้วทำการแก้ไขดังนี้:
» กดปุ่มi
ให้คำว่า"index.html"
ที่อยู่ด้านล่างซ้ายเปลี่ยนเป็น-- INSERT --
» Copy Code ด้านล่างนี้ และนำไปวางในไฟล์ index.html ที่เรากำลังแก้ไขอยู่โดยคลิกขวาเพื่อวางได้เลย
<html><body>Test</body></html>
root@ip-172-31-27-236:~
<html><body>Test</body></html> // วาง Code ที่นี่
~
~
~
~
~
~
-- INSERT -- 1,31 All // กดปุ่ม i ที่แป้นพิมพ์
เมื่อวาง Code เสร็จแล้ว กดปุ่มEsc
ให้--INSERT--
หายไป
จากนั้นพิมพ์:x
หรือ:wq
เพื่อทำการ Save
root@ip-172-31-27-236:~
<html><body>Test</body></html> // วาง Code ที่นี่
~
~
~
~
~
~
:x
เมื่อสร้างไฟล์ index.html เสร็จแล้วผมจะทดสอบหน้าเว็บไซต์โดยใช้ Public IPv4 address ของ EC2 Instance
ไปที่หน้า Console EC2 Instance ของเราและ Copy Public IPv4 address จากนั้นนำไปเปิดที่เว็บเบราว์เซอร์ เช่น Chrome
เมื่อเปิดเว็บเบราว์เซอร์ด้วย Public IPv4 address แล้วจะเห็นข้อความว่าTest
ตามที่ผมได้สร้างไว้ในไฟล์ index.html เมื่อสักครู่นี้
ทดสอบหน้าเว็บไซต์โดยรัน Server ผ่าน PHP8.0
รันคำสั่งนี้เพื่อสร้างไฟล์ info.php และใช้ในการทดสอบหน้าเว็บไซต์
vi info.php
เมื่อเข้ามาที่ไฟล์ info.php แล้วทำการแก้ไขดังนี้:
» กดปุ่มi
ให้คำว่า"info.php"
ที่อยู่ด้านล่างซ้ายเปลี่ยนเป็น-- INSERT --
» Copy Code ด้านล่างนี้ และนำไปวางในไฟล์ info.php ที่เรากำลังแก้ไขอยู่โดยคลิกขวาเพื่อวางได้เลย
<?php phpinfo();
root@ip-172-31-27-236:~
<?php
phpinfo();
~
~
~
~
~
-- INSERT -- 2,11 All // กดปุ่ม i ที่แป้นพิมพ์
เมื่อวาง Code เสร็จแล้ว กดปุ่มEsc
ให้--INSERT--
หายไป
จากนั้นพิมพ์:x
หรือ:wq
เพื่อทำการ Save
root@ip-172-31-27-236:~
<?php
phpinfo();
~
~
~
~
~
:x
เมื่อสร้างไฟล์ vi info.php เสร็จแล้วผมจะทดสอบหน้าเว็บไซต์โดยใช้ Public IPv4 address ของ EC2 Instance อีกครั้งครับ
กลับมาที่เว็บเบราว์เซอร์ที่เรา Copy Public IPv4 address ไปวางเมื่อสักครู่นี้ จากนั้นให้เพิ่ม/info.php
+ Enter อีกครั้งตามตัวอย่างด้านล่างนี้ครับ
http://[IP Address]/info.php
เมื่อเพิ่ม/info.php
ในเว็บเบราว์เซอร์เสร็จแล้ว จะเห็นเป็นหน้าเว็บไซต์ของ PHP8.0.xx ครับ
จากนั้นให้สังเกตที่Server API: FPM/FastCGI
คือเมื่อรัน PHP โดยใช้ Nginx ก็จะเป็นการรันจาก library ที่เรียกว่าFPM / FastCGI
นั่นเอง
ทีนี้เราจะมาตรวจสอบสถานะ FPM/FastCGI โดยรันคำสั่งนี้ด้านล่างนี้ครับ
php-fpm -v
Output↓↓↓
root@ip-172-31-27-236:~
[root@ip-172-31-27-236 html]# php-fpm -v
PHP 8.0.18 (fpm-fcgi) (built: May 16 2022 19:09:24)
Copyright (c) The PHP Group
Zend Engine v4.0.18, Copyright (c) Zend Technologies
[root@ip-172-31-27-236 html]#
สรุป
เมื่อผู้ใช้งานทำการเชื่อมต่อจากเว็บเบราว์เซอร์แล้ว Nginx ก็จะดำเนินการ และเมื่อเริ่มต้นระบบ php-fpm ก็จะทำให้สามารถใช้งาน info.php ได้ ! แต่ถ้าไม่มี php-fpm ก็จะไม่สามารถใช้งาน info.php ได้ ดังนั้นถ้าเราติดตั้ง Nginx แล้วเราต้องติดตั้ง PHP8.0 และเปิดใช้งาน php-fpm ไว้ด้วยจึงจะสามารถใช้งานได้ครับ