VPS của tôi đang cung cấp cho tôi tùy chọn giữa việc chạy PHP dưới dạng Mô-đun Apache hoặc FastCGI.
Làm thế nào nên đưa ra quyết định này? Hiệu suất? Bảo vệ? Dễ sử dụng? Khả năng tương thích?
Tôi đang sử dụng PLESK.
VPS của tôi đang cung cấp cho tôi tùy chọn giữa việc chạy PHP dưới dạng Mô-đun Apache hoặc FastCGI.
Làm thế nào nên đưa ra quyết định này? Hiệu suất? Bảo vệ? Dễ sử dụng? Khả năng tương thích?
Tôi đang sử dụng PLESK.
Câu trả lời:
Liên kết PHP như một mô-đun HTTPD của Apache làm cho chúng không thể tách rời.
Điều này không phải là không có vấn đề:
Thật vậy, nhiều thư viện PHP không phải là chủ đề an toàn , do đó , điều cần thiết là sử dụng mô đun prefork-mpm cho HTTPD 2.x trong sản xuất để thực hiện một máy chủ web không phân luồng, xử lý trước các yêu cầu theo cách tương tự như HTTPD 1.3 .
Nhưng phương pháp này ảnh hưởng mạnh đến hiệu suất, có thể làm quá tải CPU và RAM, gây ra thời gian chờ và các rắc rối khác.
Trang hướng dẫn Apache Performance Tune khai sáng cho chúng tôi thêm một chút về những lợi thế và bất lợi:
Các prefork MPM sử dụng nhiều tiến trình con với một thread mỗi. Mỗi quá trình xử lý một kết nối tại một thời điểm. Trên nhiều hệ thống, prefork có thể so sánh về tốc độ với worker, nhưng nó sử dụng nhiều bộ nhớ hơn. Thiết kế không luồng của Prefork có lợi thế hơn worker trong một số trường hợp: nó có thể được sử dụng với các mô-đun của bên thứ ba không an toàn và dễ dàng gỡ lỗi trên các nền tảng có hỗ trợ gỡ lỗi luồng kém.
Vì vậy, IMHO, PHP với FastCGI phù hợp hơn trong sản xuất.
Hơn nữa, sở thích của tôi là dành cho mod_fastcgi chứ không phải mod_fcgid vì nó cung cấp nhiều chức năng hơn, chẳng hạn như khả năng xác định trình quản lý quy trình bên ngoài.
Dù sao, sẽ không có nhu cầu nhiều hơn cho mô-đun prefork-mpm , và cuối cùng sẽ có thể truyền mô-đun worker-mpm , hiệu quả hơn nhiều; ngoại trừ quy trình quản lý được xử lý thông qua tập lệnh shell để khởi chạy chương trình thực thi php-cgi , điều này không thuận tiện.
May mắn thay, chúng ta có thể sử dụng Trình quản lý quy trình FastCGI cho PHP ( PHP-FPM ) , một bản vá phổ biến được tích hợp tự nhiên kể từ PHP 5.3.3 . Thật không may, nếu bạn đang sử dụng PHP 5.2.x , bạn sẽ bị giới hạn trong FastCGI cổ điển .
Tuy nhiên, điều quan trọng là phải nhận thức được các lỗ hổng có thể có liên quan đến chế độ CGI , như được báo cáo trên trang hướng dẫn CGI và thiết lập dòng lệnh :
Cảnh báo
Một máy chủ được triển khai trong chế độ CGI sẽ mở ra một số lỗ hổng có thể xảy ra. Vui lòng đọc phần bảo mật CGI của chúng tôi để tìm hiểu cách tự bảo vệ mình khỏi các cuộc tấn công như vậy.
Bạn có thể xem bài đăng trên blog này, trong đó có một ví dụ về sử dụng thực tế và giúp ích rất nhiều trong việc viết phản hồi này:
php, fastcgi, fpm et apache (tiếng Pháp)
php, fastcgi và apache fpm (tiếng Anh với Google Dịch)
Không. Nó thực sự phức tạp hơn một chút rồi đó. Theo như tôi hiểu câu hỏi, khi Apache đang xử lý một yêu cầu, nó sẽ tải tất cả thư viện PHP (trong trường hợp PHP là Mô-đun Apache). Ngay cả khi thực hiện một yêu cầu ressource tĩnh. Vì vậy, nó tiêu thụ rất nhiều bộ nhớ.
Giải pháp khác là httpserver phía trước có trọng số nhẹ. Nó sẽ thực thi yêu cầu tĩnh và chuyển tiếp yêu cầu php tới PHP-CGI.
Để tiếp tục điều này:
PHP với tùy chọn FAST CGI chạy nhanh như chạy trên hệ điều hành LINUX. Microsoft đã thực hiện rất nhiều cải tiến trong IIS7 cho PHP để bao quát thị trường lưu trữ OPEN SOURCE SCRIPT (WordPress, Drupal, Joomla, v.v.).
Tôi đang lưu trữ các ứng dụng PHP của mình trên IIS7 với FastCGI và chạy WordPress mượt mà như chạy trên Linux Hosting. Tôi chỉ cần tải lên các tệp php của mình vào thư mục public_html để chạy các ứng dụng php của mình.