Những ưu và nhược điểm của việc chạy PHP dưới dạng mô-đun Apache hoặc FastCGI là gì?


7

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.


2
Điều này thích hợp hơn cho ServerFault hay cho StackOverflow?
Nute

1
Xin đừng đóng cửa. Nếu bạn nghĩ rằng nó nên được chuyển đi, nhưng đừng đóng. Đây không phải là một câu hỏi kết thúc mở.
Nute

Cả hai phiếu bầu gần bạn có thể thấy trên thực tế là phiếu bầu để chuyển cho quản trị trang web (chúng xuất hiện dưới ô "đóng"). Có thể nhanh hơn để bạn xóa câu hỏi này và tạo một câu hỏi mới tại quản trị trang web. Nó sẽ không làm hỏng đại diện của bạn nếu bạn làm như vậy và nếu bạn không phải đợi một mod đến đây hoặc đợi 5 người bình chọn ...
DaveRandom

Đối với bất kỳ ai khác bị nhầm lẫn ngắn bởi nhận xét của @ DaveRandom ở trên, xin lưu ý rằng nó đã được đăng trước khi câu hỏi này được di chuyển ở đây từ SO và trước khi nó có bất kỳ câu trả lời nào.
Ilmari Karonen

Câu trả lời:


4

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)


1

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:

  • Mô-đun PHP Apache: Đơn giản, dễ dàng, tiêu chuẩn, được sử dụng trong 90%.
  • PHP-CGI: Trình diễn khi có nhiều nguồn tài nguyên tĩnh (hình ảnh, hình ảnh, v.v.). Một chút phức tạp hơn để cấu hình, bảo trì.

-1

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.

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.