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

วิธีเรียกใช้หลายเว็บไซต์ด้วยเวอร์ชัน PHP ที่แตกต่างกันใน Nginx


บางครั้งนักพัฒนา PHP ต้องการสร้างและรันเว็บไซต์/แอพพลิเคชั่นที่แตกต่างกันโดยใช้ PHP เวอร์ชันที่แตกต่างกันบนเว็บเซิร์ฟเวอร์เดียวกัน ในฐานะผู้ดูแลระบบ Linux คุณจะต้องตั้งค่าสภาพแวดล้อมที่คุณสามารถเรียกใช้เว็บไซต์หลายแห่งโดยใช้ PHP เวอร์ชันที่แตกต่างกันบนเว็บเซิร์ฟเวอร์เดียว เช่น Nginx

ในบทช่วยสอนนี้ เราจะอธิบายวิธีการติดตั้ง PHP หลายเวอร์ชันและกำหนดค่าเว็บเซิร์ฟเวอร์ Nginx ให้ทำงานร่วมกับเซิร์ฟเวอร์บล็อก (โฮสต์เสมือนใน Apache) ใน การแจกแจง CentOS/RHEL 7 โดยใช้สแต็ก LEMP

อ่านเพิ่มเติม: Pyenv – ติดตั้ง Python หลายเวอร์ชันสำหรับโปรเจ็กต์เฉพาะ

Nginx ใช้ PHP-FPM (ย่อมาจาก FastCGI Process Manager) ซึ่งเป็นอีกทางเลือกหนึ่งของการใช้งาน PHP FastCGI กับบางโปรแกรม คุณสมบัติพิเศษที่เป็นประโยชน์สำหรับเว็บไซต์ที่มีการโหลดจำนวนมาก

การทดสอบการตั้งค่าสภาพแวดล้อม

  1. เซิร์ฟเวอร์ CentOS 7 หรือ RHEL 7 ที่มีการติดตั้งเพียงเล็กน้อย
  2. เซิร์ฟเวอร์ Nginx HTTP
  3. PHP 7.1 (เพื่อใช้เป็นเวอร์ชันเริ่มต้น) และ 5.6.
  4. เซิร์ฟเวอร์ฐานข้อมูล MariaDB
  5. ที่อยู่ IP ของเซิร์ฟเวอร์: 192.168.56.10
  6. เว็บไซต์: example1.com และ example2.com

ขั้นตอนที่ 1: การติดตั้งและเปิดใช้งาน EPEL และ Remi Repository

1. เริ่มต้นด้วยการติดตั้งและเปิดใช้งานพื้นที่เก็บข้อมูล EPEL และ Remi ซึ่งมี PHP เวอร์ชันล่าสุด ซ้อนกันบนการกระจาย CentOS/RHEL 7

yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm

2. ถัดไปให้ติดตั้งแพ็คเกจ yum-utils ซึ่งจะขยายฟังก์ชันการทำงานดั้งเดิมของ yum และจัดเตรียมคำสั่ง yum-config-manager ซึ่งใช้ในการเปิดใช้งาน หรือปิดการใช้งานพื้นที่เก็บข้อมูล Yum บนระบบ

yum install yum-utils

หมายเหตุ: ใน RHEL 7 คุณสามารถเปิดใช้งานช่องตัวเลือกสำหรับการขึ้นต่อกันบางอย่างได้โดยใช้คำสั่งต่อไปนี้

subscription-manager repos --enable=rhel-7-server-optional-rpms

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

3. หากต้องการติดตั้ง Nginx เวอร์ชันล่าสุด เราจำเป็นต้องเพิ่มพื้นที่เก็บข้อมูล Nginx อย่างเป็นทางการ สร้างไฟล์ชื่อ /etc/yum.repos.d/nginx.repo

vi /etc/yum.repos.d/nginx.repo

เพิ่มบรรทัดต่อไปนี้ลงในไฟล์ตามการแจกจ่ายของคุณ

--------------- On CentOS 7 --------------- 
[nginx] 
name=nginx repo 
baseurl=http://nginx.org/packages/centos/7/$basearch/ 
gpgcheck=0 
enabled=1 


--------------- On RHEL 7 ---------------
[nginx] 
name=nginx repo 
baseurl=http://nginx.org/packages/rhel/7.x/$basearch/ 
gpgcheck=0 
enabled=1 

4. เมื่อเพิ่ม nginx repo แล้ว คุณสามารถติดตั้ง Nginx โดยใช้เครื่องมือตัวจัดการแพ็คเกจ yum ดังที่แสดง

yum install nginx

ขั้นตอนที่ 3: การติดตั้งเซิร์ฟเวอร์ฐานข้อมูล MariaDB

5. หากต้องการติดตั้ง MariaDB เวอร์ชันล่าสุด เราจำเป็นต้องเพิ่มพื้นที่เก็บข้อมูล MariaDB อย่างเป็นทางการ สร้างไฟล์ชื่อ /etc/yum.repos.d/mariadb.repo

vi /etc/yum.repos.d/mariadb.repo

เพิ่มบรรทัดต่อไปนี้ลงในไฟล์ตามการแจกจ่ายของคุณ

--------------- On CentOS 7 --------------- 
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.2/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1


--------------- On RHEL 7 ---------------
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.2/rhel7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1 

6. เมื่อเพิ่ม repo MariaDB แล้ว คุณจะสามารถติดตั้ง MariaDB โดยใช้เครื่องมือตัวจัดการแพ็คเกจ yum ดังที่แสดง

yum install MariaDB-client MariaDB-server

7. หลังจากนั้น ให้รักษาความปลอดภัยการติดตั้งเซิร์ฟเวอร์ฐานข้อมูลโดยใช้สคริปต์ด้านล่าง ตั้งรหัสผ่านรูทและตอบ y และกด [Enter] สำหรับคำถามต่อ ๆ ไปที่เหลือเพื่อปิดการใช้งานการเข้าสู่ระบบของผู้ใช้รูทระยะไกล ลบบัญชีผู้ใช้ที่ไม่ระบุชื่อ และฐานข้อมูลทดสอบซึ่งโดย ผู้ใช้ทุกคนสามารถเข้าถึงค่าเริ่มต้นได้ แม้แต่ผู้ใช้ที่ไม่ระบุชื่อก็ตาม

mysql_secure_installation

อ่านเพิ่มเติม: 12 แนวทางปฏิบัติที่ดีที่สุดด้านความปลอดภัย MySQL/MariaDB สำหรับ Linux

ขั้นตอนที่ 4: การติดตั้ง PHP หลายเวอร์ชัน

8. หากต้องการติดตั้ง PHP เวอร์ชันต่างๆ สำหรับโปรเจ็กต์ของคุณ ให้ใช้คำสั่ง yum-config-manager เพื่อติดตั้ง PHP หลายเวอร์ชันพร้อมกับโมดูลที่จำเป็นที่สุดดังที่แสดง

ติดตั้ง PHP เวอร์ชัน 7.1

yum-config-manager --enable remi-php71  [Default]
yum install php php-common php-fpm
yum install php-mysql php-pecl-memcache php-pecl-memcached php-gd php-mbstring php-mcrypt php-xml php-pecl-apc php-cli php-pear php-pdo

ติดตั้งเวอร์ชัน PHP 5.6

yum install php56 php56-php-common php56-php-fpm
yum install php56-php-mysql php56-php-pecl-memcache php56-php-pecl-memcached php56-php-gd php56-php-mbstring php56-php-mcrypt php56-php-xml php56-php-pecl-apc php56-php-cli php56-php-pear php56-php-pdo

9. เมื่อติดตั้ง PHP แล้ว คุณสามารถใช้คำสั่งต่อไปนี้เพื่อตรวจสอบเวอร์ชันเริ่มต้นของ PHP ที่ใช้บนเซิร์ฟเวอร์ของคุณ

php -v

ขั้นตอนที่ 5: การกำหนดค่า PHP-FPM และ PHP56-PHP-FPM

10. นี่เป็นส่วนที่น่าสนใจที่สุดของบทช่วยสอนนี้ โดยจะอธิบายว่าคุณสามารถใช้งาน PHP หลายเวอร์ชันบนเซิร์ฟเวอร์ของคุณได้อย่างไร ที่นี่ คุณจะกำหนดค่า php-fpm เวอร์ชันต่างๆ ที่ Nginx จะใช้งานได้ คุณควรกำหนดผู้ใช้/กลุ่มของกระบวนการ FastCGI รวมถึงพอร์ตที่พวกเขาจะรับฟัง

นี่คือไฟล์การกำหนดค่าสองไฟล์ต่อไปนี้ที่คุณจะแก้ไข

  • php-fpm (ค่าเริ่มต้น 7.1) – /etc/php-fpm.d/www.conf
  • php56-php-fpm – /opt/remi/php56/root/etc/php-fpm.d/www.conf

เปิดไฟล์ด้านบน ตั้งค่าผู้ใช้/กลุ่มของกระบวนการ FastCGI

vi /etc/php-fpm.d/www.conf   [PHP 7.1]
vi /opt/remi/php56/root/etc/php-fpm.d/www.conf  [PHP 5.6] 

ค่าเริ่มต้นควรเป็น apache เปลี่ยนเป็น nginx ตามที่แสดง

user = nginx
group = nginx

11. จากนั้น ค้นหาพารามิเตอร์ Listen และกำหนด address:port ที่จะรับคำขอ FastCGI

listen = 127.0.0.1:9000	[php-fpm]
listen = 127.0.0.1:9001	[php56-php-fpm]

12. เมื่อการกำหนดค่าข้างต้นทั้งหมดเสร็จสิ้น คุณจะต้องเริ่มต้นและเปิดใช้งาน Nginx, MariaDB และ PHP-FPM เพื่อเริ่มต้นอัตโนมัติเมื่อบูตระบบ

systemctl enable nginx 
systemctl start nginx 

systemctl enable mariadb 
systemctl start mariadb 

---------------- PHP 7.1 ---------------- 
systemctl enable php-fpm 
systemctl start php-fpm 

---------------- PHP 5.6 ----------------
systemctl enable php56-php-fpm 
systemctl start php56-php-fpm 

โปรดทราบ: ในกรณีที่คุณได้รับข้อผิดพลาดใด ๆ ในขณะที่เริ่มต้นอินสแตนซ์ที่สองของ PHP php56-php-fpm นโยบาย SELinux อาจถูกบล็อก มันตั้งแต่เริ่มต้น หาก SELinux อยู่ใน โหมดบังคับใช้ ให้ตั้งค่าเป็น โหมดอนุญาต จากนั้นลองเริ่มบริการอีกครั้ง

getenforce
setenforce 0 

ขั้นตอนที่ 6: ตั้งค่าเว็บไซต์ด้วยสิทธิ์

13. ณ จุดนี้ คุณสามารถสร้างไดเร็กทอรีที่จำเป็นสำหรับเว็บไซต์ของคุณภายใต้ /var/www/html/ คุณต้องสร้างไดเร็กทอรีเพื่อจัดเก็บบันทึกดังนี้:

---------------- Website 1 ----------------
mkdir -p /var/www/html/example1.com/ 
mkdir -p /var/log/nginx/example1.com/ 
 

---------------- Website 2 ----------------
mkdir -p /var/www/html/example2.com/
mkdir -p /var/log/nginx/example2.com/ 

14. ตั้งค่าสิทธิ์การเป็นเจ้าของที่เหมาะสมในทุกไดเร็กทอรี

---------------- Website 1 ----------------
chown -R root:nginx /var/www/html/example1.com/ 
chmod -R 755 /var/www/html/example1.com/ 
chown -R root:nginx /var/log/nginx/example1.com/
chmod -R 660 /var/log/nginx/example1.com/ 

---------------- Website 2 ----------------
chown -R root:nginx /var/www/html/example2.com/ 
chmod -R 755 /var/www/html/example2.com/
chown -R root:nginx /var/log/nginx/example2.com/ 
chmod -R 660 /var/log/nginx/example2.com/

ขั้นตอนที่ 7: ตั้งค่าบล็อกเซิร์ฟเวอร์ Nginx สำหรับเว็บไซต์

15. ตอนนี้กำหนดค่าวิธีที่ Nginx จะประมวลผลคำขอไปยังเว็บไซต์ของคุณโดยใช้ไฟล์การกำหนดค่าบล็อกเซิร์ฟเวอร์ซึ่งควรอยู่ใน /etc/nginx/conf.d/

สร้างไฟล์การกำหนดค่าสำหรับเว็บไซต์ของคุณที่ลงท้ายด้วยนามสกุล .conf

vi /etc/nginx/conf.d/example1.com.conf
vi /etc/nginx/conf.d/example2.com.conf

จากนั้นวางการกำหนดค่าบล็อกเซิร์ฟเวอร์ต่อไปนี้ในไฟล์ที่เกี่ยวข้อง

เว็บไซต์ 1

server {
        listen 80;
        server_name example1.com www.example1.com;

        root   /var/www/html/example1.com/;
        index index.php index.html index.htm;

        #charset koi8-r;
        access_log /var/log/nginx/example1.com/example1_access_log;
        error_log   /var/log/nginx/example1.com/example1_error_log   error;

       location / {
                try_files $uri $uri/ /index.php?$query_string;
        }

       # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        location ~ \.php$ {

                root    /var/www/html/example1.com/;
                fastcgi_pass   127.0.0.1:9000;	#set port for php-fpm to listen on
                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                include         fastcgi_params;
                include /etc/nginx/fastcgi_params;

        }
}

เว็บไซต์ 2

server {
        listen 80;
        server_name example2.com www.example2.com;

        root    /var/www/html/example2.com/;
        index index.php index.html index.htm;

        #charset koi8-r;
        access_log /var/log/nginx/example2.com/example2_access_log;
        error_log  /var/log/nginx/example2.com/example2_error_log   error;

       location / {
                try_files $uri $uri/ /index.php?$query_string;
        }

       # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        location ~ \.php$ {

                root    /var/www/html/example2.com/;
                fastcgi_pass   127.0.0.1:9001;	#set port for php56-php-fpm to listen on
	        fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                include         fastcgi_params;
                include /etc/nginx/fastcgi_params;

        }
}

16. ตรวจสอบให้แน่ใจว่าคุณมีบรรทัดต่อไปนี้ในส่วนปิดของบล็อก http ใน /etc/nginx/nginx.conf การรวมไฟล์การกำหนดค่าทั้งหมดไว้ในไดเร็กทอรี /etc/nginx/conf.d/ เมื่อ Nginx กำลังทำงานจะช่วยได้มาก

include /etc/nginx/conf.d/*.conf;

ขั้นตอนที่ 8: ทดสอบ PHP เวอร์ชันต่างๆ

17. สุดท้ายนี้ คุณต้องทดสอบว่าเซิร์ฟเวอร์ของคุณใช้ PHP ทั้งสองเวอร์ชันหรือไม่ คุณสามารถสร้างสคริปต์ info.php ขั้นพื้นฐานได้ในไดเรกทอรีรากของเอกสารของเว็บไซต์ของคุณดังที่แสดง

echo "<?php phpinfo(); ?>" > /var/www/html/example1.com/info.php
echo "<?php phpinfo(); ?>" > /var/www/html/example2.com/info.php

18. หากต้องการใช้การเปลี่ยนแปลงทั้งหมดที่คุณทำไว้ข้างต้น คุณต้องรีสตาร์ท Nginx, php-fpm และ php56-php- เอฟพีเอ็ม. แต่ก่อนอื่นคุณสามารถตรวจสอบว่าไฟล์การกำหนดค่า Nginx มีข้อผิดพลาดทางไวยากรณ์ก่อนที่จะดำเนินการดังกล่าว

nginx -t 
systemctl restart nginx php-fpm php56-php-fpm

19. ยังมีอีกสิ่งสุดท้ายที่ต้องทำ โดยเฉพาะอย่างยิ่งหากคุณใช้งานเซิร์ฟเวอร์ในเครื่อง คุณจะต้องตั้งค่า DNS ในเครื่องโดยใช้ไฟล์ /etc/hosts ดังที่แสดงใน ภาพหน้าจอด้านล่าง

192.168.56.10   example1.com   example1
192.168.56.10   example2.com   example2

20. สุดท้าย เปิดเว็บเบราว์เซอร์และพิมพ์ที่อยู่ต่อไปนี้เพื่อตรวจสอบเวอร์ชันของ PHP ที่ติดตั้งบนระบบ

http://example1.com/index.php
http://example2.com/index.php

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