2015-06-10 15 views
5

Được rồi, sẽ hơi điên khi cố gắng tìm ra điều này. (Tôi đã đọc hàng trăm câu hỏi/câu trả lời và các bài viết trên google nhưng không có câu hỏi nào được trả lời)Chỉ định tệp PHP ini cho mỗi máy chủ, với cấu hình FastCGI/PHP-fpm

Tôi vừa thay đổi từ sử dụng mod_php sang sử dụng PHP qua FastCGI và fpm, sử dụng phương pháp được mô tả trong this question, theo ấn tượng, thật dễ dàng để chỉ định tệp php.ini cho vhost riêng lẻ bằng cách sử dụng thiết lập này.

Tôi đang kéo tóc ra, tôi có thể chỉ định tệp PHP ini tùy chỉnh mà mỗi vhost sử dụng như thế nào?

May mắn thay, Nó chỉ trên giàn khoan thử nghiệm của tôi cho đến nay ... Nhưng tôi hy vọng sẽ làm điều tương tự trên máy chủ sản xuất của tôi nếu tôi bao giờ có thể con số này ra

+0

Theo kinh nghiệm của tôi: bạn có thể xác định các cấu hình máy chủ ảo trên mỗi máy chủ (gọi là 'vhost.conf' trên máy chủ của chúng tôi) mặc dù chúng tôi có 1 php.ini cho toàn bộ máy chủ. – tvgemert

Trả lời

4

tôi nghĩ rằng tôi như giếng thể gửi toàn bộ quá trình tôi đã để cấu hình fpm với hồ bơi, như @ChristianM đề cập, bởi vì tôi đã chưa tìm thấy một lời giải thích đầy đủ về cách để làm điều đó.

Phần đầu tiên của việc này là chủ yếu là một bản sao của một bài AskUbuntu: https://askubuntu.com/questions/378734/how-to-configure-apache-to-run-php-as-fastcgi-on-ubuntu-12-04-via-terminal/527227#comment905702_527227

Phần cuối cùng là làm thế nào để cấu hình bơi, và nhận được vhost để sử dụng các thiết lập có liên quan hồ bơi

Ở đây nó đi :

Cài đặt người lao động apache MPM (Giải thích về prefork/wroker và sự kiện tại http://www.vps.net/blog/2013/04/08/apache-mpms-prefork-worker-and-event/):

sudo apt-get install apache2-mpm-worker 

Install fastcgi và php5-fpm:

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

Bây giờ cho phép mods bạn cần, và vô hiệu hóa những bạn không:

sudo a2dismod php5 mpm_prefork 
sudo a2enmod actions fastcgi alias mpm_worker 

Tạo file php5.fcgi và cho phép sử dụng các máy chủ web nó.

sudo touch /usr/lib/cgi-bin/php5.fcgi 
sudo chown -R www-data:www-data /usr/lib/cgi-bin 

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

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

dán vào sau (chúng tôi sẽ sử dụng một ổ 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> 

Lưu ý: Đảm bảo tất cả configs thực hiện theo cú pháp mới 'Yêu cầu tất cả đã được cấp'/'Yêu cầu tất cả bị từ chối' ... Nếu không, bạn sẽ cảm thấy đau sau khi khởi động lại ...

Kích hoạt tính năng conf php5-fpm

sudo a2enconf php5-fpm 

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

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

Thiết lập này về cơ bản sẽ tạo ra một cấu hình fastcgi toàn cầu cho php, trong đó sử dụng các tập tin/etc/php5/fpm/tệp php.ini.

Nếu bạn có nhiều vhosts, mà sẽ cần cấu hình php khác nhau, tiếp tục với ví dụ dưới đây

Thứ nhất, trong dir /etc/php5/fpm/pool.d, bạn sẽ tìm thấy www mặc định .conf tập tin. Sao chép này, đặt tên cho nó một cái gì đó có liên quan:

sudo cp /etc/php5/fpm/pool.d/www.conf /etc/php5/fpm/pool.d/domain2.conf 

Chỉnh sửa tập tin này, thay đổi tên hồ bơi:

[...] 

[domain2] 

[...] 

Và thay đổi tên của ổ cắm lắng nghe một cái gì đó có liên quan:

[...] 

listen = /var/run/php5-fpm-domain2.sock 

[...] 

Sau đó, sao chép tệp /usr/lib/cgi-bin/php5.fcgi, lại đặt tên cho nó là có liên quan:

cp /usr/lib/cgi-bin/php5.fcgi /usr/lib/cgi-bin/php5-domain2.fcgi 

Bây giờ bạn đã sẵn sàng để thêm mô đun mod_fastcgi vào domain2 vhost. Nó gần giống như mô tả ở trên, nhưng chú ý đến những thay đổi cho 'Bí danh', 'FastCgiServer' và '-socket'

<VirtualHost *:80> 
     ServerName domain2.com 

     [...] 

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

    [...] 

</VirtualHost> 

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

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

Bây giờ để kiểm tra những thay đổi.

Trong file /etc/php5/fpm/pool.d/domain2.conf mới, hãy thêm một sự thay đổi giá trị php (Tôi đã chọn giá trị session.name):

[...] 

php_admin_value[session.name] = 'DOMAIN2' 

[...] 

Bây giờ kiểm tra cấu hình trước khi khởi động lại fpm:

sudo php5-fpm -t 

Nó sẽ cho bạn biết nếu cấu hình không thành công, nhưng quan trọng hơn sẽ cho bạn biết cấu hình của bạn có ổn không. Sau đó, bạn có thể đi trước và khởi động lại fpm:

sudo service php5-fpm restart 

Và cuối cùng, nếu bạn muốn trở thành siêu chắc chắn giá trị php đã được thiết lập, tạo info.php trong trang web của bạn, và chỉ cần thêm:

<?php 
 phpinfo(); 
?> 
4

Đáng tiếc là nó không phải là có thể thiết lập một php. ini tập tin cho mỗi vhost. Những gì bạn có thể làm là cấu hình các nhóm php-fpm khác nhau và cung cấp cho mỗi tập hợp các giá trị cấu hình php đặt/ghi đè lên một cái gì đó từ cấu hình mặc định (được chia sẻ). Xem fpm configuration về cách thực hiện điều đó.

Example config with different pools

+0

Điều này có vẻ là câu trả lời thực tế. Không, bạn không thể. Bạn có thể làm việc xung quanh nó bằng cách đặt chúng trong các thiết lập fpm như câu trả lời được chấp nhận mô tả, nhưng bạn không thể chỉ định một php.ini cả. – DM8

Các vấn đề liên quan