Apache + Php 7 Với Fastcgi Và Php, Tối Ưu Nginx Và Php

Apache Handler là gì?

Handler là cơ chế (script, chức năng module) thành thi hành khi một file nào đó được Apache gọi đến. Điều này có nghĩa mỗi kiểu file (file type như .php, .html, .cgi …) có một Handler riêng, nhiều khi có thể cấu hình để với kiểu file, vị trí của file trên đĩa tương ứng với một loại Hander. Handler có loại tích hợp sẵn trong Apache Server, có loại tải vào bằng Module (như php), có loại tải vào bằng cấu hình theo ngữ cảnh Action nào đó. Theo như https://httpd.apache.org/ có các Hander mặc định tích hợp sẵn là:

default-handler : sử dụng phục vụ các nội dung tĩnh (như các file ảnh .jpg …) send-as-is : (mod_asis) – Apache gửi file nhưng không có hầu hết phần header thông thường cgi-script : hander này thi hành file như cgi script server-info : lấy thông tin server server-status : lấy trạng thái server type-map : phân tích file, ánh xạ đến nội dung cần thiết

Handler cũng được gán bằng một CGI script được kích hoạt bởi Action, ví dụ khi khi gọi đến file có phần mở rộng .xyz thì xử lý file đó với script CGI “/cgi-bin/program.cgi”

# Files of a particular file extensionAddHandler my-file-type .xyzAction my-file-type “/cgi-bin/program.cgi”Ví dụ thêm vào Virtual Host thiết lập

SetHandler server-infoKhi gọi đến địa chỉ /server-info thì Hander server-info sẽ thi hành và trả về toàn bộ thông tin của Apache Server

*

Tương tư với Handler server-status

Sử dụng Handler cơ bản

Những cú pháp này viết trong file config (httpd.conf)

#Thêm một handerAddHandler handler-name extension# handler-nam là tên handler# extension là phần mở rông của file gắn với handler (php, html …)#Loại bỏ HandlerRemoveHandler extension# extension là phần mở rông của file gắn với handler cần bỏ# Thiết lập hander cho một nhóm file phù hợp# SetHandler handler-name#Các file .php sẽ mở bằng handler có tên application/x-httpd-php SetHandler application/x-httpd-php

Các PHP Handler

Khi Apache chạy các file .php thì nó sử dụng Handler phù hợp để đọc được mã PHP, yêu cầu PHP thi hành và có được nội dung trả về cho client.

Khi cài đặt PHP có một số PHP Handler bạn có thể sử dụng với Apache như CGI, DSO, FPM, FCGId, suPHP

Kiểm tra PHP Handle

Chạy script php sau: phpinfo.php

*

Dòng Server API sẽ cho biết Apache đã dùng Handler gì để gọi file .php

Apache 2.0 Handler

Đây là Handler PHP mặc định trong Apache/Php, nó thiết lập tính an toàn cao bằng cách chạy các script php với user là nobody hoặc apache, tuy nhiên nếu dùng suPHP thì an toan hơn nhiều, nhưng suPHP không còn được duy trì cập nhật (bản cuối 2013 suphp.org)

FastCGI Handler

FastCGI kế thừa từ CGI nó được tùy chỉnh để giảm tải sự tương tác giữa script CGI và Webserver, cho phép Server phụ vụ được nhiều yêu cầu cùng lúc hơn.

Cài đặt FastCGI trên CentOS7, PHP 7

# yum install php php-cli mod_fcgidSau khi cài đặt sẽ có module Apache mod_fcgid, giờ sẽ thiết lập để phối hợp cùng module mod_action chạy file .php

Hủy PHP Handler mặc định, mở file vi /etc/httpd/conf.d/php.conf, và comment (thêm # vào đầu)

## SetHandler application/x-httpd-php#Tạo Script Handler

Thư mục gốc ứng dụng web của bạn đang ở /var/www/ tạo ra một script có tên vi /var/www/cgi-bin/php.fastcgi với nội dung như sau

#!/bin/bashexec /usr/bin/php-cgiLưu lại, rồi chuyển owner mong muốn, chmod quyền chạy được như sau:

# chown apache:apache /var/www/cgi-bin/php.fastcgi# chmod +x /var/www/cgi-bin/php.fastcgiCó thể mở /etc/httpd/conf.d/fcgid.conf thêm các thiết lập

FcgidConnectTimeout 20 # 20 second timeout on connnectFcgidMaxRequestLen 268435456 # 256MB upload/post limitFcgidMaxProcessesPerClass 10 # Up to 10 PHP processes per user at a timeFcgidIOTimeout 300 # 5 minute timeout on requestTại các cấu hình Virtual Host, host thư mục web mặc định thiết lập Handler mới dùng đến script cgi trên, dạng cơ bản như sau:

AllowOverride None # Allow open access: Require all granted AddHandler php-fastcgi .php Action php-fastcgi /cgi-bin/php.fastcgi AllowOverride All Order allow,deny Allow from AllNếu không thích dùng Action như trên có thể dùng FcgidWrapper

AddHandler fcgid-script .phpFcgidWrapper /var/www/cgi-bin/php.fastcgi .php Options +ExecCGIKhởi động lại Apache, chạy script kiểm tra phpinfo

# service httpd restart

*

PHP-FPM

Tương tự như FastCGI ở trên, chạy php qua CGI nhưng PHP-FPM sử dụng proxy với proxy_fcgi, Handler này có nhiều ưu điểm nhất FPM

Hủy Handler cũ đi và tiến hành cài đặt

# yum install php-fpmCài đặt xong sẽ có dịch vụ php-fpm, thiết lập nó tự động chạy cùng hệ thống

# chkconfig php-fpm onHoặc CentOS7# systemctl enable php-fpmChạy php-fpm# service php-fpm startLúc này có một dịch vụ chờ ở proxy 127.0.0.1:9000 chuyên để chạy PHP Script, giờ vào httpd.conf thiết lập Handler gọi để Apache sử dụng Proxy này chạy PHP

#Thiết lập Handler này cho tất cả các fileSetHandler “proxy:fcgi://127.0.0.1:9000″#Hoặc chỉ .php#AddHandler “proxy:fcgi://127.0.0.1:9000” .phpKhởi động lại Apache service httpd restart và kiểm tra xem

Related Posts