Tìm kiếm bài viết

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

23.03.2020

5.0/5 (1 Reviews)

Hướng dẫn cài multi php, apache trên centos 7. Mỗi Version php chạy cho 1 website nhất định, Có phải bạn đang cần cài riêng php cho một vài web?

    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

     
    CÓ THỂ BẠN QUAN TÂM

    Bài Viết Cùng Chuyên Mục

    XEM THÊM
    thumbnail

    Kubernetes bài 6 - Vận hành k8s Day-Two Operations và Quản trị bằng GitOps

    22.05.2026

    Khi cụm Kubernetes của bạn đã được bảo mật cấu hình, tối ưu tài nguyên và thiết lập tự phục hồi, câu hỏi đặt ra là làm sao để duy trì sự ổn định đó trong nhiều năm tiếp theo mà không bị phụ thuộc

    thumbnail

    Kubernetes bài 5 - bảo mật Cloud Native và chuẩn DevSecOps cho K8s

    22.05.2026

    Việc siết chặt an ninh (Hardening) không phải là cấu hình một vài thông số rồi bỏ đó, mà là một tư duy phòng thủ chiều sâu.

    thumbnail

    Kubernetes bài 4 - Tối ưu Resource Auto-Healing và Scale Zero-Downtime

    22.05.2026

    Bài viết này sẽ đi sâu vào các cơ chế ở tầng Kernel giúp hệ thống tự phục hồi, chống lại các đợt tấn công cạn kiệt tài nguyên và cập nhật phiên bản mới mà người dùng không hề hay biết.

    thumbnail

    Kubernetes bài 3 - Bảo mật cấu hình k8s và config Security trên Production

    22.05.2026

    Kubernetes giải quyết bài toán này bằng hai đối tượng chuyên biệt nhưng nếu không hiểu rõ bản chất bảo mật ở tầng dưới, bạn đang tự tay dâng toàn bộ chìa khóa hệ thống cho hacker.

    thumbnail

    Kubernetes bài 2 - Mạng lưới k8s và luồng Traffic ở Packet Level

    22.05.2026

    Pod không chỉ là một container: Rất nhiều người nhầm lẫn Pod 1-1 với Container. Thực chất, Pod là đơn vị triển khai nhỏ nhất, có thể chứa một hoặc nhiều container

    Mục lục bài viết