|
||||||||
|
||||||||
|
|
Công Cụ | Xếp Bài |
08-07-2010, 01:58 PM | #1 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Administrator
Gia nhập: Jul 2009
Trả Lời: 245
|
Cài đặt Apache2 với module mod_fcgid và PHP5 trên OpenSUSE 11.2
cách cài đặt Apache2 với module mod_fcgid và PHP5 trên OpenSUSE 11.2. Về bản chất, module mod_fcgid là 1 sự thay thế hoàn hảo của mod_fastcgi, module này cho phép người dùng thực thi các đoạn mã PHP với sự cho phép của người dùng bên trong các tài khoản Apache.
Lưu ý sơ bộ Trong bài viết này chúng ta sử dụng hệ thống OpenSUSE 11.2 server cùng với hostname server1.example.com và địa chỉ IP 192.168.0.100, đồng thời tạo 2 Apache vhost là www.example1.com và www.example2.com, để mô phỏng phương thức sử dụng mod_fcgid. Cài đặt Apache2/mod_fcgi/PHP5 Để cài đặt những thành phần trên, chúng ta sử dụng câu lệnh sau: Nếu Apache2 đã được cài đặt sẵn với PHP5 như 1 phần module của Apache, tắt bỏ module PHP5 như sau: Tiếp theo, kích hoạt 2 module suexec và fcgid: Tạo đường dẫn khởi động của Apache: Mở file /etc/php5/fastcgi/php.ini …: và chú thích các đoạn mã như sau: Sau đó khởi động lại Apache: Tạo vhost cho www.example1.com và www.example2.com Việc tiếp theo của chúng ta là tạo 2 vhost, www.example1.com (với thư mục tài liệu root /srv/www/web1/web) và www.example2.com (thư mục tài liệu root tại /srv/www/web2/web). Trong đó, www.example1.com được sở hữu bởi người dùng và nhóm web1, www.example2.com thuộc về người dùng và web2. Trước tiên, tạo tài khoản người dùng và nhóm: Sau đó tạo thư mục tài liệu root và tạo quyền chứng thực, sở hữu thuộc về web1 và web2: Sau đó chạy PHP sử dụng suExec, thư mục tài liệu root của suExec tại /srv/www: Do đó chúng ta không thể gọi được các file PHP thực thi lệnh (/usr/bin/php-cgi) trực tiếp vì nó được lưu trữ bên ngoài thư mục tài liệu root của suExec. Nhưng suExec không chấp nhận các symlink, phương pháp duy nhất để giải quyết vấn đề này tạo mã wrap tương ứng cho mỗi web site trong từng thư mục con của /srv/www; các đoạn mã wrap này sẽ có chức năng gọi file thực thi PHP /usr/bin/php-cgi. Và, những đoạn mã wrap này phải được quản lý và sở hữu trực tiếp bởi tài khoản người dùng và nhóm tương ứng của các web site, tại đây chúng ta sẽ tạo mã wrap trong thư mục con của /srv/www/php-fcgi-scripts, ví dụ như /srv/www/php-fcgi-scripts/web1 và /srv/www/php-fcgi-scripts/web2. Dòng PHPRC chứa thông tin về thư mục nơi file php.ini được lưu trữ (ví dụ /etc/php5/fastcgi/ thành /etc/php5/fastcgi/php.ini). Trong đó PHP_FCGI_MAX_REQUESTS là số lượng yêu cầu tối đa trước khi quá trình fcgid dừng lại và quá trình mới tiếp tục. PHP_FCGI_CHILDREN định nghĩa số lượng “PHP children” sẽ được kích hoạt. Các đoạn mã php-fcgi-starter phải được kích hoạt: Tiếp theo, tạo vhost Apache của www.example1.com và www.example2.com: Hãy chắc chắn các bạn đã nhập đúng địa chỉ đường dẫn và các tham số kỹ thuật cần thiết (với đúng tài khoản user và nhóm trong dòng khai báo SuexecUserGroup) Mở file /etc/apache2/httpd.conf và thêm dòng NameVirtualHost * vào trước Include /etc/apache2/vhosts.d/*.conf (nếu không thì chỉ có vhost đầu tiên hoạt động): Trước khi khởi động lại Apache, chúng ta cần thay đổi các thiết lập và xác nhận quyền hạn của việc thực thi suExec (nếu không thì mỗi lần khởi động Apache thì bạn sẽ nhận được cảnh báo: Warning: SuexecUserGroup directive requires SUEXEC wrapper): Và sau đó khởi động lại Apache như bình thường: Kiểm tra Để kiểm tra, chúng ta sẽ tạo file test PHP nho nhỏ, như ví dụ với web site www.example1.com: và sau đó gọi file đó qua trình duyệt (http://www.example1.com/info.php). Nếu tất cả quá trình trên hoạt động đúng chức năng, bạn sẽ nhìn thấy kết quả tương tự như sau, đồng thời sẽ thấy hàm CGI/FastCGI trong dòng Server API: Tùy chỉnh file php.ini cho mỗi web site Trên thực tế, mỗi web site đều có mã wrap php-fcgi-starter của riêng nó, do đó hoàn toàn có thể tạo các file php.ini riêng biệt đối vơi mỗi web site thành phần. Để mô phỏng quá trình này, chúng ta sẽ copy file php.ini mặc định (/etc/php5/fastcgi/php.ini) tới thư mục /srv/www/web2/ và làm cho www.example2.com gọi file php.ini trực tiếp từ thư mục /srv/www/web2/: (tại đây, các bạn có thể /srv/www/web2/php.ini theo ý thích) Tiếp theo, mở file /srv/www/php-fcgi-scripts/web2/php-fcgi-starter …: và chèn thêm tham số /srv/www/web2/ vào trong dòng PHPRC: Sau đó khởi động lại Apache: Tiếp đó, tạo thêm file phpinfo(); mới dành cho www.example2.com…: và tiếp tục gọi file đó ra bằng trình duyệt (http://www.example2.com/info.php). Dòng tham số Loaded Configuration File sẽ chỉ ra file /srv/www/web2/php.ini: Thay đổi cấu trúc PHP đơn Thay vì việc đi qua file php.ini mới tới toàn bộ web site, các bạn có thể áp dụng phương pháp thay đổi thiết lập PHP trong mã wrap php-fcgi-starter (hoặc sử dụng cách kết hợp cả 2) bằng cách thêm tham số -d để chuyển sang chế độ thực thi PHP. Ví dụ, nếu ta muốn tắt bỏ module magic_quotes_gpc của www.example2.com thì sẽ làm như sau: Và khởi động lại Apache: Tiếp tục, gọi file info.php bằng trình duyệt (http://www.example2.com/info.php) và tìm kiếm dòng magic_quotes_gpc, trình duyệt sẽ chỉ ra tình trạng Off: Chúc các bạn thành công! |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|