Sự khác biệt và khác biệt / khuyến khích giữa: Fast-CGI, CGI, Mod-PHP, SuPHP, PHP-FPM


73

Có một vài "hàm bao" php khác nhau (?). Sự khác biệt giữa chúng là gì? Đã thử với google một số, nhưng dường như không thể tìm thấy thông tin. (mod-php không thể kết nối được).

Tại sao tôi có thể chọn cái này hơn cái khác?

Câu trả lời:


141

Các câu hỏi hơi lạ một chút, không rõ là bạn chỉ hỏi PHP hay câu hỏi của bạn chung chung hơn.

Tôi sẽ cung cấp cho bạn một cái nhìn tổng quan ngắn gọn từ phía PHP.

Đầu tiên, hai giao thức:

  • Các tập lệnh CGI là cách chạy tập lệnh phía máy chủ khi có yêu cầu HTTP; điều này không liên quan gì đến PHP

  • FastCGI là một "CGI tốt hơn" - CGI được biết là chậm, Fast CGI là một cách tiếp cận khác với kết quả nhanh hơn nhiều; điều này cũng không có gì để làm với PHP.

Bây giờ những thứ liên quan đến PHP:

  • mod_php đang chạy PHP dưới dạng mô-đun Apache - đó là yêu cầu PHP được chạy theo quy trình Apache với mọi thứ đi kèm với nó - Các quy trình Apache được định nghĩa bởi cấu hình Apache, PHP được chạy với sự cho phép của Apache, v.v.

  • PHP-FPM là triển khai FastCGI của PHP; PHP-FPM chạy như một máy chủ FastCGI độc lập và Apache kết nối với máy chủ bằng mô-đun của Apache, thường là mod_fcgid hoặc mod_fastcgi; Cá nhân tôi nghĩ rằng điều này tốt hơn nhiều so với việc chạy như mod_php, nhưng nó phụ thuộc vào yêu cầu của bạn và cũng phức tạp hơn một chút; trong cấu hình này, sự cho phép, các quy trình liên quan và mọi thứ được chạy dưới cấu hình PHP, người dùng PHP, v.v. & Apache kết nối với PHP như với một máy chủ; trong cấu hình này, cũng có thể có nhóm máy chủ PHP và có máy chủ PHP trên máy khác về mặt vật lý so với Apache. Họ nói rằng điều này gần như nhanh như sử dụng mô-đun của Apache và có những lợi ích của việc kiểm soát tốt hơn cấu hình PHP.

  • SuPHP - điều này chủ yếu được sử dụng để giải quyết một số vấn đề về mod_php liên quan đến quyền; với các tập lệnh PHP mod_php được chạy dưới người dùng / nhóm Apache; mod_suphp có thể chạy các tập lệnh trong người dùng khác nhau; Tôi chưa bao giờ sử dụng nó, PHP-FPM bây giờ sẽ là sự lựa chọn tốt hơn nhiều

Nên về cơ bản:

  • CGI, Fast-CGI là các giao thức; CGI chậm, Fast-CGI nhanh hơn nhiều
  • mod_php (có dấu gạch dưới) và PHP-FPM là hai cách cơ bản để chạy PHP
  • mod_SuPHP tương tự như mod_php nhưng có thể thay đổi người dùng / nhóm mà quá trình chạy theo

Có lẽ tôi sẽ làm rõ những gì đã truyền cảm hứng cho tôi cho câu hỏi này. Tôi vừa nhận được một VPS với bảng điều khiển ISPConfig (Bảng mở cho trang quản trị). Ở đó tôi có thể chọn một phiên bản PHP cho máy chủ / bên. Và những người được liệt kê ở đó. Vì vậy, về cơ bản, có vẻ như việc chọn PHP-FPM chọn FastCGI với các "trình bao bọc" bổ sung?
Gacek

12
Tôi không biết bảng điều khiển ISPConfig thực sự sử dụng cái gì, nhưng PHP chạy như PHP-FPM nghĩa là PHP sẽ khởi động máy chủ FastCGI tích hợp sẵn của nó và sẽ lắng nghe yêu cầu thông qua giao thức FastCGI. Máy chủ HTTP sẽ nhận được yêu cầu từ internet, xử lý chúng như thường lệ và trong trường hợp một trang cần được chạy bằng PHP, yêu cầu sẽ được chuyển giao thức FastCGI cho PHP và kết quả sẽ được gửi lại cho trình duyệt. Hãy nghĩ về điều đó khi máy chủ HTTP đứng giữa trình duyệt và máy chủ PHP (PHP-FPM FastCGI). PHP-FPM là một triển khai của giao thức FastCGI.
Aleš Krajník

@ AlešKrajník cảm ơn vì lời giải thích công phu đó. Chà, tôi đã cố chạy php với tư cách là người dùng / nhóm riêng biệt. Vì vậy, tôi bắt đầu với Su-exec và đi vào ngõ cụt và sau đó một vài người đề xuất php-fpm mà bạn đã giải thích. Tuy nhiên, tôi vẫn nhầm lẫn về các mô-đun mog_cgi, mod_cgid, mod_fastcgi, mod_fcgi và cách chúng hoạt động với php-fpm. Ngoài ra tôi đọc trong một hướng dẫn khác họ đang sử dụng mod_fcgid và mod_proxy_fcgi. Làm thế nào đấu tranh để hiểu làm thế nào tất cả các mảnh lại với nhau.
David Okwii

1
@landed PHP-FPM nhị phân là một phần của mọi bản phân phối PHP kể từ 5.3.3 hoặc 5.4.0 (kiểm tra cái này: php-fpm.org ), cho phiên bản PHP cụ thể đó.
Aleš Krajník

2
php-fpm là tất cả về việc loại bỏ chi phí khởi tạo. php-fpm khởi động trước một số quy trình php, sẵn sàng xử lý các yêu cầu và cho chúng ngủ cho đến khi các yêu cầu đến - có nghĩa là nó có thể đáp ứng nhanh hơn nhiều so với cgi truyền thống, bởi vì php đã chạy khi yêu cầu đến, trái ngược với CGI truyền thống, trong đó một quy trình php mới được bắt đầu cho mỗi yêu cầu, cũng như php-fpm không tắt quy trình php sau khi xử lý các yêu cầu, nhưng tiếp tục sử dụng lại các quy trình tương tự. - với 0 chi phí bắt đầu và dừng quá trình, php-fpm đáp ứng nhanh hơn nhiều. bắt đầu và dừng quá trình mất thời gian.
hanshenrik
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.