Làm cách nào để định cấu hình Apache để chạy PHP dưới dạng FastCGI trên Ubuntu 12.04 qua thiết bị đầu cuối?


35

Tôi còn khá mới mẻ với thế giới quản lý / quản trị máy chủ web dòng lệnh unix.

Nhiều máy chủ lưu trữ với các tùy chọn quản trị bảng điều khiển cho phép bạn thay đổi cách PHP chạy với một tùy chọn đơn giản.

Các tùy chọn phổ biến nhất là:

  • mô-đun apache
  • Ứng dụng CGI
  • Ứng dụng FastCGI

Câu hỏi của tôi chỉ đơn giản là, làm thế nào để bạn thay đổi điều này thông qua dòng lệnh? Tôi biết có nhiều tập tin cấu hình cho apache.

Điều gần nhất tôi tìm thấy là câu hỏi này , tuy nhiên cấu trúc thư mục dường như không khớp với HĐH của tôi (Ubuntu 12.04).

Tôi khá hoang mang khi dường như không có một hướng dẫn rõ ràng nào mà tôi có thể tìm thấy chi tiết quá trình này cho một thứ dường như quá phổ biến. Hãy tha thứ cho tôi nếu điều này tồn tại ... nếu vậy, xin vui lòng chỉ cho tôi đi đúng hướng.


Điều gần nhất tôi tìm thấy là câu hỏi này trên trang web SO That không phải là Stack Overflow.
ta.speot.is

1
Điều này trên fastcgi giải thích nó khá tốt.

1
@ ta.speot.is tha thứ, pleaassuh . . Cảm ơn Matt, tất nhiên tôi đã xem fastcgi.com, nhưng tôi thấy những hướng dẫn đó hơi khó thực hiện.
Evan Mattson

@ ta.speot.is, Lỗi đánh máy đơn giản. Ý anh là "SE" chứ không phải "SO".
Pacerier

Câu trả lời:


49

Cảm ơn vì những câu trả lời trước đây họ đã giúp tôi thực hiện mọi cách, nhưng để mọi thứ hoạt động tốt, tôi phải kết hợp các hướng dẫn từ một vài nơi, vì vậy tôi nghĩ rằng tôi sẽ viết ra một bộ lệnh hoàn chỉnh.

FYI Tôi đang chạy Ubuntu 14.04, Apache 2.4 và cũng có modphp chạy theo mặc định, các hướng dẫn trước đây cũng không cần phải tắt modphp.

Tôi cũng tìm thấy http://blog.starcklin.com/2013/08/install-mod-fastcgi-and-php5-fpm-on-ubfox/ rất thông tin và đơn giản.

Chỉ cần chạy các lệnh sau trong một thiết bị đầu cuối lần lượt.

Trước tiên hãy cài đặt các gói cần thiết (tôi bỏ php5 vì điều này giả sử nó đã được cài đặt, thêm lại vào lần cài đặt đầu tiên). Cũng lưu ý từ Apache 2.4 trở lên, bạn có thể sử dụng event-mpm thay vì worker, xem http://www.vps.net/blog/2013/04/08/apache-mpms-prefork-worker-and-event/ . Ví dụ của tôi cho thấy worker, nhưng chỉ thay thế worker worker bằng event nếu bạn muốn sử dụng cái đó.

sudo apt-get install apache2-mpm-worker

sudo apt-get install libapache2-mod-fastcgi php5-fpm

Bây giờ kích hoạt các mod bạn cần và vô hiệu hóa những mod bạn không dùng.

sudo a2dismod php5 mpm_prefork

sudo a2enmod actions fastcgi alias mpm_worker

Tạo tệp php5.fcgi và cấp quyền cho máy chủ web sử dụng nó.

sudo touch /usr/lib/cgi-bin/php5.fcgi

sudo chown -R www-data:www-data /usr/lib/cgi-bin

Tạo cấu hình toàn cầu cho php5-fpm

sudo nano /etc/apache2/conf-available/php5-fpm.conf

dán vào phần sau (chúng tôi sẽ sử dụng ổ cắm thay vì địa chỉ IP)

<IfModule mod_fastcgi.c> 
   AddHandler php5.fcgi .php 
   Action php5.fcgi /php5.fcgi 
   Alias /php5.fcgi /usr/lib/cgi-bin/php5.fcgi 
   FastCgiExternalServer /usr/lib/cgi-bin/php5.fcgi -socket /var/run/php5-fpm.sock -pass-header Authorization -idle-timeout 3600 
   <Directory /usr/lib/cgi-bin>
       Require all granted
   </Directory> 
</IfModule>

Kích hoạt conf conf php5-fpm

sudo a2enconf php5-fpm

Khởi động lại apache và fpm

sudo service apache2 restart && sudo service php5-fpm restart

Theo hướng dẫn khác, dán đoạn sau vào tệp php có thể duyệt mới trên máy chủ web của bạn.

<?php phpinfo();

Mở tệp bạn vừa chỉnh sửa trong trình duyệt web, Nếu bạn thấy "FPM / FastCGI" bên cạnh API máy chủ, bạn hiện đang phục vụ PHP với FastCGI!


4
Đây là một cứu cánh. Hướng dẫn cho apache cũ không hoạt động trên Ubuntu 14.04 và apache 2.4; nhưng cái này làm việc như một lá bùa +100 !!
Bhavin Doshi

Tôi đã làm theo điều này một cách chính xác, nhưng tôi gặp lỗi 'Bạn không có quyền truy cập /php5.fcgi/index' ... Và trong nhật ký lỗi, 'máy khách bị từ chối bởi cấu hình máy chủ: / usr / lib / cgi-bin /php5.fcgi '... Có ý tưởng nào không?
Chỉ cần may mắn thật sự

Tìm ra nó ... Tôi đã sử dụng cấu hình 'từ chối đơn hàng, cho phép' cũ để root vì một số lý do ... Tất cả đã được sửa ngay bây giờ: D
Chỉ là Lucky Thật sự là

Tôi đã gặp lỗi sau khi cài đặt gói và cấu hình "apache2: lỗi cú pháp trên dòng 216 của /etc/apache2/apache2.conf: Lỗi cú pháp trên dòng 9 của /etc/apache2/conf-enatted/php5-fpm.conf: Dự kiến </ Directory> but saw </ IfModule> "
Farooq


20

Cuối cùng tôi đã tìm thấy một hướng dẫn tốt đẹp hướng đến việc này. Tôi sẽ phác thảo các bước tôi đã thực hiện khi tôi đã cài đặt LAMP stack của mình nhưng hướng dẫn đầy đủ có thể được tìm thấy ở đây .

Lưu ý cho cái mới:

Trong hướng dẫn, nó bắt đầu bằng cách chuyển sang người dùng root bằng:

sudo su

Trong trường hợp của tôi, tôi chỉ đơn giản là tiền tố các lệnh sudođó thay vì chuyển đổi người dùng, vì vậy tôi sẽ ghi lại các bước của mình theo cách đó.

Bắt đầu

Bước một: Cài đặt MPM Apache Worker (Mô-đun đa cấp)

sudo apt-get install apache2-mpm-worker

Cái này thay thế cho prefork mà tôi đã cài đặt, mặc định khi cài đặt Apache.

Bước 2: Cài đặt PHP5 và các mô-đun cần thiết

sudo apt-get install libapache2-mod-fastcgi php5-fpm php5

Tại thời điểm này, bạn có thể gặp lỗi khi cài đặt 'libapache2-mod-fastcgi':

Reading package lists... Done
Building dependency tree       
Reading state information... Done
Package libapache2-mod-fastcgi is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or is only available from another source

E: Package 'libapache2-mod-fastcgi' has no installation candidate

Phần này không có trong hướng dẫn ở trên

Để dung hòa điều này, multiversekho lưu trữ phải được thêm vào các nguồn apt.

Để làm điều này:

sudo nano /etc/apt/sources.list

Tôi đã nối các dòng sau:

deb http://archive.ubuntu.com/ubuntu precise multiverse
deb http://archive.ubuntu.com/ubuntu precise-updates multiverse
deb http://security.ubuntu.com/ubuntu precise-security multiverse

precisetrong trường hợp này đề cập đến phiên bản Ubuntu " Precolin Pangolin " của tôi.

Vì vậy, bây giờ, lưu những thay đổi đó và quay lại thiết bị đầu cuối:

sudo apt-get update

Và một lần nữa:

sudo apt-get install libapache2-mod-fastcgi php5-fpm php5

mà sẽ (nên) bây giờ làm việc.

Bây giờ kích hoạt các mô-đun Apache này:

sudo a2enmod actions fastcgi alias

khởi động lại apache

sudo service apache2 restart

Bước 3: Cấu hình Apache

Để làm cho Apache hoạt động với PHP-FPM, chúng ta cần cấu hình sau:

<IfModule mod_fastcgi.c>
    AddHandler php5-fcgi .php
    Action php5-fcgi /php5-fcgi
    Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi
    FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -host 127.0.0.1:9000 -pass-header Authorization
    <Directory /usr/lib/cgi-bin>
        Require all granted 
    </Directory>
    #directory statement mult be on multiple lines
</IfModule>

Chú thích:

Nếu bạn đang sử dụng phiên bản cũ hơn của Apache (2.3.x trở lên), hãy bỏ qua dòng

   <Directory /usr/lib/cgi-bin> Require all granted </Directory>

Bạn có thể kiểm tra phiên bản đã cài đặt của mình bằng lệnh

apache2 -version

Bạn có thể đặt nó trong cấu hình Apache toàn cầu (vì vậy nó được kích hoạt cho tất cả các vhost), ví dụ như trong /etc/apache2/conf.d/php5-fpm.conf(tệp này không tồn tại, do đó bạn phải tạo nó) hoặc bạn có thể đặt nó trong mỗi vhost nên sử dụng PHP-FPM.

Tôi chọn đi theo con đường toàn cầu, vì vậy:

sudo nano /etc/apache2/conf.d/php5-fpm.conf

dán vào khối mã ở trên và lưu, thoát. Tệp mới này sẽ được tự động tải theo cấu hình mặc định của Apache, tải tất cả các tệp trong /etc/apache2/conf.d/thư mục.

khởi động lại Apache:

sudo service apache2 restart

Bây giờ tạo tệp PHP sau trong tài liệu gốc /var/www:

sudo nano /var/www/info.php

Thêm vào:

<?php phpinfo();

cứu thoát.

Bây giờ chúng tôi gọi tệp đó trong trình duyệt (ví dụ http://your-server-ip/info.php)

Trong API máy chủ ở đầu bạn sẽ thấy FPM/FastCGI.

Sự thành công!

Để biết thêm thông tin như cách thay đổi PHP-FPM để sử dụng ổ cắm unix thay vì cổng TCP mặc định hoặc cách định cấu hình này cho các máy chủ ảo riêng lẻ thay vì tất cả chúng, hãy xem hướng dẫn nguồn được liên kết ở trên cùng.


Tôi đã phải thêm cái này trước </ IfModule>: <Directory / usr / lib / cgi-bin> Yêu cầu tất cả được cấp </ Directory>
Rimu Atkinson

@RimuAtkinson là chính xác, theo mặc định, tất cả các thư mục sẽ bị cấm trong các phiên bản mới hơn, vì vậy bạn sẽ phải cấp quyền truy cập cụ thể vào thư mục cgi-bin. Điều này nên được thêm vào câu trả lời, vì nếu không có nó, bạn sẽ nhận được 403.
johnrom

Cảm ơn vì điều này! Lưu ý rằng Require all grantedđiều này chỉ được yêu cầu kể từ Apache 2.4. Nếu tôi đặt nó trong tệp cấu hình với Apache 2.2, nó sẽ thất bại.
leeme

Tôi đã thêm một ghi chú. (Vui lòng chỉnh sửa nó; đó là bài đăng của bạn.)) Để biết chi tiết, hãy xem stackoverflow.com/a/22040167/592323
leeme

1
Câu trả lời này không hoạt động trên Ubuntu 14.04. Tham khảo câu trả lời của JDawgg để làm điều đó trong 14.04.
Bhavin Doshi

1

Trong Ubuntu 14.04 sau khi thực hiện các bước của câu trả lời được chấp nhận, hãy chỉnh sửa /etc/apache2/conf-av Available / php5-fpm.conf

<IfModule mod_fastcgi.c>
    AddHandler php5-fcgi .php
    Action php5-fcgi /php5-fcgi
    Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi
    FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -socket /var/run/php5-fpm.sock -pass-header Authorization -idle-timeout 3600
    <Directory /usr/lib/cgi-bin>
        Require all granted
    </Directory>
</IfModule>

Sau đó thực hiện

#sudo a2enconf php5-fpm
#sudo apache2 restart

0

Trong trường hợp ai đó đang làm điều này trên Ubuntu 16.04 và đã hạ cấp từ php 7 xuống php 5.6 (Ondrej), bạn phải thay thế một số dòng (dựa trên câu trả lời của JDawgg):

sudo apt-get cài đặt libapache2-mod-fastcgi php5-fpm tới:

sudo apt-get install libapache2-mod-fastcgi php5.6-fpm 

sudo a2dismod php5 mpm_prefork để:

sudo a2dismod php5.6 mpm_prefork

sudo nano /etc/apache2/conf-av Available / php5-fpm.conf để:

sudo vim /etc/apache2/conf-available/php5.6-fpm.conf

Quá trình cài đặt php5.6-fpm đã tạo tệp, do đó không cần phải tạo tệp. Tuy nhiên, tôi đã xóa tất cả văn bản hiện có trên tệp đó vì nó có nghĩa là mod_php5.

<IfModule mod_fastcgi.c> 
   AddHandler php5.fcgi .php 
   Action php5.fcgi /php5.fcgi 
   Alias /php5.fcgi /usr/lib/cgi-bin/php5.fcgi 
   FastCgiExternalServer /usr/lib/cgi-bin/php5.fcgi -socket /var/run/php/php5.6-fpm.sock -pass-header Authorization -idle-timeout 3600 
   <Directory /usr/lib/cgi-bin>
       Require all granted
   </Directory> 
</IfModule>

Tôi đã thay đổi đường dẫn từ /var/run/php5-fpm.sock thành /var/run/php/php5.6-fpm.sock vì tệp được đặt ở đó.

sudo a2enconf php5-fpm tới:

sudo a2enconf php5.6-fpm

sudo dịch vụ apache2 khởi động lại && sudo dịch vụ php5-fpm khởi động lại:

sudo service apache2 restart && sudo service php5.6-fpm restart

Tôi hy vọng điều này sẽ giúp những người mới khác như tôi :)

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.