Cách chạy nhiều phiên bản PHP với apache trên linux CentOS 7

Cách chạy nhiều phiên bản PHP với apache trên linux CentOS 7

Trong hướng dẫn hôm nay, chúng tôi muốn trình bày cách chạy nhiều phiên bản PHP với apache trên CentOS 7 linux. Nó rất thực tế và phổ biến để có nhiều phiên bản php và chạy nó đồng thời với apache trên một máy chủ. có thể bạn có một tập lệnh php và muốn kiểm tra nó với nhiều phiên bản php. trong trường hợp như vậy bài viết này là dành cho bạn.

Nếu bạn đang Thiết kế website chạy bằng PHP hay đang học lập trình, học DevOps thì đây sẽ là vấn đề bạn sẽ  gặp phải trong tương lai nhé.

Làm thế nào nó có thể chạy nhiều phiên bản.

Khi chúng tôi yêu cầu một trang .php từ apache, nó sẽ tham khảo ứng dụng của SetHandler application/x-httpd-php. Để biết mô-đun nào sẽ được tải để xử lý tập lệnh php. vấn đề là ở đây, php nằm dưới sự kiểm soát của apache.

Trong kịch bản của chúng tôi, mọi thứ đi khác nhau. ở đây chúng tôi sử dụng quy trình php độc lập được gọi là php-fpm. php-fpm là một trình nền php được cấu hình để đáp ứng các yêu cầu FCGI. vì vậy chúng tôi bắt đầu và dừng php-fpm và apache một cách độc lập.

Đây là môi trường của tôi trong ví dụ này:

OS: CentOS 7 linux on VMWare
Firewall: enabled
SELinux: enforcing
PHP versions: 5.6 and 7.2

Cài đặt thư viện

Trước khi cài đặt và chạy hai phiên bản php, chúng ta cần cài đặt apache và một số kho lưu trữ. để thực hiện các lệnh sau:

# yum install httpd
# yum install epel-release
# yum install yum-utils

Cài đặt nhiều phiên bản php:

php-fpm có sẵn trong kho remi. Vì vậy, chúng tôi cài đặt repo này và sau đó sau nhiều phiên bản php.

# yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
# yum install php56 
# yum install php72
# yum install php56-php-fpm
# yum install php72-php-fpm

Cài những Module cần thiết để chạy website nhé.

# For PHP 7.2
yum install php72 php72-php-fpm php72-php-mysqlnd php72-php-opcache php72-php-xml php72-php-xmlrpc php72-php-gd php72-php-mbstring php72-php-json
# For PHP 5.6 
yum install php56 php56-php-fpm php56-php-mysqlnd php56-php-opcache php56-php-xml php56-php-xmlrpc php56-php-gd php56-php-mbstring php56-php-json
# Copyright by: https://lptech.asia

sau đó phải đảm bảo cả hai service php đều stop nhé.

# systemctl stop php56-php-fpm
# systemctl stop php72-php-fpm

Cấu hình SELinux

Linux được tăng cường bảo mật nâng cao an toàn được gọi là SELinux. SELinux là một kiến ​​trúc bảo mật cho các hệ thống Linux®, cho phép các quản trị viên có quyền kiểm soát nhiều hơn đối với những người có thể truy cập hệ thống. Ban đầu nó được Cơ quan An ninh Quốc gia Hoa Kỳ (NSA) phát triển thành một loạt các bản vá cho nhân Linux bằng Mô-đun Bảo mật Linux (LSM).

RedHat bật Selinux theo mặc định vì an toàn hơn. Gần như mọi nhà cung cấp sử dụng các sản phẩm có nguồn gốc Redhat đều tắt Selinux vì họ không muốn phải đặt thời gian (và do đó là tiền) để tìm hiểu lý do tại sao thứ đó không hoạt động. Người Redhat / Fedora đã bỏ ra rất nhiều thời gian và công sức để biến Selinux trở thành một lựa chọn khả thi trong Doanh nghiệp, nhưng không có nhiều tổ chức khác thực sự quan tâm đến bảo mật của bạn. (Họ quan tâm đến bảo mật của họ và danh tiếng bảo mật của sản phẩm, đó là một điều hoàn toàn khác.)

để cho phép selinux chạy các tập lệnh php-fpms, hãy chạy các lệnh sau:

# semanage port -a -t http_port_t -p tcp 9072
# semanage port -a -t http_port_t -p tcp 9056

Cấu hình php-fpm:

Mặc định, mỗi phiên bản php-fpm đang nghe trên cổng 9000. vì chúng tôi muốn chạy nhiều phiên bản php, chúng tôi cần thay đổi cổng mặc định:

# sed -i 's/:9000/:9056/' /etc/opt/remi/php56/php-fpm.d/www.conf
# sed -i 's/:9000/:9072/' /etc/opt/remi/php72/php-fpm.d/www.conf

bây giờ chạy hai service php-fpm lên.

# systemctl start php72-php-fpm
# systemctl start php56-php-fpm

bây giờ chúng ta cần tạo trình thực thi tập lệnh php để gọi php56-cgi và php72-cgi:

cat > /var/www/cgi-bin/php56.fcgi << EOF
#!/bin/bash
exec /bin/php56-cgi
EOF

cat > /var/www/cgi-bin/php72.fcgi << EOF
#!/bin/bash
exec /bin/php72-cgi
EOF

Đây là tôi dùng lệnh command-line để chèn nội dung vào file thôi. Bạn có thể sửa file trực tiếp trên server bằng VIM, SFTP hoặc bằng các công cụ như Winscp ...

Tạo 2 file mới tại đường dẫn: 

/var/www/cgi-bin/php72.fcgi 

với nội dung: 

#!/bin/bash
exec /bin/php72-cgi

Sau đó chúng ta thiết lập bit thực thi trên cả hai tập lệnh:

# sudo chmod 755 /var/www/cgi-bin/php56.fcgi
# sudo chmod 755 /var/www/cgi-bin/php72.fcgi

Cấu hình apache:

Ở đây LPTech tạo ra hai đường dẫ đến source php để chạy 2 phiên bản php khác sau ở 2 thư mục khác nhau. Một cho php-fpm56 và một cho php-fpm72. bạn có thể thay đổi những đường dẫn này bằng cách riêng của mình, không được thì gửi mail cho LPTech nhé:

cat > /etc/httpd/conf.d/php.conf << EOF
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
AddHandler php56-fcgi .php
Action php56-fcgi /cgi-bin/php56.fcgi
Action php72-fcgi /cgi-bin/php72.fcgi

<Directory /home/lptech/php56>
    DirectoryIndex index.php
    AllowOverride all
    Require all granted
</Directory>
    <Directory /home/lptech/php72>
    DirectoryIndex index.php
    AllowOverride all
    Require all granted
</Directory>
EOF

sau đó chúng tôi đặt hai tập lệnh phpinfo() trên hai đường dẫn này để kiểm tra:

mkdir -p /home/lptech/php56
mkdir -p /home/lptech/php72
echo "<?php phpinfo(); ?>" > /home/lptech/php56/index.php
echo "<?php phpinfo(); ?>" > /home/lptech/php72/index.php
echo "AddHandler php72-fcgi .php" > /home/lptech/php72/.htaccess
echo "AddHandler php56-fcgi .php" > /home/lptech/php56/.htaccess

Start services

systemctl enable httpd
systemctl enable php56-php-fpm
systemctl enable php72-php-fpm
systemctl start httpd
systemctl start php56-php-fpm
systemctl start php72-php-fpm

Cấu hình tường lửa

firewall-cmd --permanent --add-service=http
firewall-cmd --reload

Bây giờ hãy tham khảo các địa chỉ này và bạn phải xem trang php_info với hai phiên bản khác nhau:

http://127.0.0.1/php56
http://127.0.0.1/php72

 

Tags