Cài đặt Lighttpd với PHP5 và MySQl trên OpenSUSE 11 Lighttpd hoạt động nhanh, ổn định và bảo mật, tuân thủ theo tiêu chuẩn máy chủ được thiết kế với môi trường có tần suất hoạt động cao. Bài viết này sẽ trình bày cách cài đặt Lighttpd trên OpenSUSE 11 hỗ trợ PHP5 (thông qua FastCGI) và MySQL 1 Lưu ý sơ bộ Trong bài viết này tôi sử dụng hostname server1.example.com với địa chỉ IP 192.168.0.100. Cấu hình này có thể khác với của bạn, vì thế bạn cần thay thế nó cho phù hợp. 2 Cài đặt MySQL 5.0 Đầu tiên ta cài đặt MySQL như sau: $ yast2 -i mysql mysql-client Tiếp đso ta tạo liên kết khởi động cùng hệ thống cho MySQL (để MySQL tự khởi động bất cứ khi nào hệ thống khởi động) và khởi động MySQL : $ chkconfig add mysql $ /etc/init.d/mysql start Bây giờ hãy kiểm tra mạng đã được bật. Chạy : $ netstat -tap | grep mysql Kết quả trả về có dạng giống như sau: server1:~ # netstat -tap | grep mysql tcp 0 0 *:mysql *:* LISTEN 8566/mysqld server1:~ # Nếu bạn không nhận được kết quả trả về như vậy hãy sửa lại tập tin /etc/my.cnf, bỏ comment ở tùy chọn skip-networking: $ vi /etc/my.cnf [ ] #skip-networking [ ] và khởi động lại MySQL : /etc/init.d/mysql restart Chạy : mysqladmin -u root password yourrootsqlpassword để đặt mật khẩu cho tài khoản root@localhost. Như bạn đã thấy ở kết quả trả về của netstat, MySQL không chỉ lắng nghe ở localhosst mà còn ở tất cả các mặt, điều đó có nghĩa nó có thể được truy cập từ bên ngoài. Vì vậy ta cần đặt mật khẩu cho tài khoản root@server1.example.com. Nhưng có một lỗi nhỏ: Hầu hết các cột Host trong bản mysql.user không chứa server1.example.com nhưng chứa server1. Ta sẽ thay đổi nó ngay bây giờ, và sau đó ta sẽ đặt mật khẩu cho tài khoản root@server1.example.com. Hãy kết nối tới MySQL: mysql -u root -p Điền vào mật khẩu của tài khoản root. Sau đó ở chế độ dòng lệnh của MySQL hãy thực hiện: mysql> USE mysql; mysql> SELECT * FROM user; Kết quả trả về có dạng : 3 rows in set (0.00 sec) Như bạn thấy ở hàng thứ 2 nó đọc server1 thay vì server1.example.com ở cột Host. Hãy thay nó bằng server1.example.com: mysql> UPDATE user SET Host = 'server1.example.com' WHERE Host = 'server1'; mysql> FLUSH PRIVILEGES; Giờ ta đã có thể thoát khỏi chế độ dòng lệnh của MySQL: mysql> quit; Bây giờ quay trở lại chế độ dòng lệnh thông thường, ta có thể đặt mật khẩu cho tài khoản root@server1.example.com trên MySQL: mysqladmin -h server1.example.com -u root password yourrootsqlpassword 3 Cài đặt Lighttpd Lighttpd như là một gói của OpenSUSE, vì thế ta có thể cài đặt nó như sau: $ yast2 -i lighttpd Tiếp đó ta tạo liên kết khởi khởi động hệ thống cho Lighttpd (để Lighttpd tự động khởi động mỗi khi hệ thống khởi động) và khởi động nó: $ chkconfig add lighttpd $ /etc/init.d/lighttpd start Bây giờ hãy mở trình duyệt và truy cập tới địa chỉ http://192.168.0.100 và bạn sẽ thấy rằng Lighttpd cung cấp một trang (tốt, nó là một trang 404 vì không có tập tin chỉ mục(index file) trong tài liệu gốc của Lighttpd, nhưng ít nhất điều này có nghĩa là Lighttpd hoạt động tốt): Tài liệu gốc của Lighttpd ở /srv/www/htdocs trong OpenSUSE, và tập tin cấu hình là /etc/lighttpd/lighttpd.conf. 4 Cài đặt PHP5 Ta có thể thiết lập PHP5 hoạt động chạy trên Lighttpd thông qua FastCGI. Gói FastCGI cho PHP5 đã có trong OpenSUSE, php5-fastcgi, ta cài đặt nó như sau: $ yast2 -i php5-fastcgi 5 Cấu hình Lighttpd và PHP5 Để bật PHP5 trên Lighttpd ta phải sửa ba tập tin sau: /etc/php5/fastcgi/php.ini, /etc/lighttpd/modules.conf, và /etc/lighttpd/conf.d/fastcgi.conf. Đầu tiên ta mở /etc/php5/fastcgi/php.ini và bỏ comment ở dòng cgi.fix_pathinfo=1 nằm khoảng giữa của tập tin: $ vi /etc/php5/fastcgi/php.ini [ ] ; cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI. PHP's ; previous behaviour was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to not grok ; what PATH_INFO is. For more information on PATH_INFO, see the cgi specs. Setting ; this to 1 will cause PHP CGI to fix it's paths to conform to the spec. A setting ; of zero causes PHP to behave as before. Default is 1. You should fix your scripts ; to use SCRIPT_FILENAME rather than PATH_TRANSLATED. cgi.fix_pathinfo=1 [ ] Sau đó ta mở /etc/lighttpd/modules.conf và bỏ comment dòng include "conf.d/fastcgi.conf": $ vi /etc/lighttpd/modules.conf [ ] ## ## FastCGI (mod_fastcgi) ## include "conf.d/fastcgi.conf" [ ] Cuối cùng mở /etc/lighttpd/conf.d/fastcgi.conf và chắc chắn rằng nó có chứa dòng server.modules += ( "mod_fastcgi" ); sau đó bỏ comment ở đoạn fastcgi.server: $ vi /etc/lighttpd/conf.d/fastcgi.conf [ ] server.modules += ( "mod_fastcgi" ) [ ] ## PHP Example ## For PHP don't forget to set cgi.fix_pathinfo = 1 in the php.ini. ## ## The number of php processes you will get can be easily calculated: ## ## num-procs = max-procs * ( 1 + PHP_FCGI_CHILDREN ) ## ## for the php-num-procs example it means you will get 17*5 = 85 php ## processes. you always should need this high number for your very ## busy sites. And if you have a lot of RAM. :) ## fastcgi.server = ( ".php" => ( "php-local" => ( "socket" => socket_dir + "/php-fastcgi-1.socket", "bin-path" => server_root + "/cgi-bin/php5", "max-procs" => 1, "broken-scriptfilename" => "enable", ) ), ( "php-tcp" => ( "host" => "127.0.0.1", "port" => 9999, "check-local" => "disable", "broken-scriptfilename" => "enable", ) ), ( "php-num-procs" => ( "socket" => socket_dir + "/php-fastcgi-2.socket", "bin-path" => server_root + "/cgi-bin/php5", "bin-environment" => ( "PHP_FCGI_CHILDREN" => "16", "PHP_FCGI_MAX_REQUESTS" => "10000", ), "max-procs" => 5, "broken-scriptfilename" => "enable", ) ), ) [ ] Sau đó khởi động lại Lighttpd $ /etc/init.d/lighttpd restart 6 Kiểm tra PHP5 / Xem chi tiết về cài đặt PHP5 của bạn Thư mục gốc của website là /srv/www/htdocs. Bây giờ ta có thể tạo một tập tin PHP (info.php) trong thư mục này và truy cập nó trên trình duyệt. Tập tin sẽ hiển thị nhiều thông tin hữu ích về cài đặt PHP của ta, chẳng hạn như phiên bản PHP. $ vi /srv/www/htdocs/info.php phpinfo(); ?> Bây giờ truy cập nó trên trình duyệt (e.g. http://192.168.0.100/info.php): Như bạn thấy PHP đã hoạt động và nó hoạt động thông qua FastCGI, như đã được hiển thị ở dòng SERVER API. Nếu cuộn xuống dưới bạn sẽ thấy tất cả các modules đã được bật ở PHP5. MySQL không được liệt kê có nghĩa MySQL chưa hỗ trợ PHP5. 7 Thiết lập MySQL Support cho PHP5 Để làm cho MySQl hỗ trợ PHP ta có thể cài đặt gói php5-mysql package. Sẽ là một ý tốt để cài đặt một vài modules khác của PHP5 để bạn có thể sử dụng nó cho ứng dụng của mình: $ yast2 -i php5-mysql php5-bcmath php5-bz2 php5-calendar php5-ctype php5- curl php5-dbase php5-dom php5-ftp php5-gd php5-gettext php5-gmp php5- iconv php5-imap php5-ldap php5-mbstring php5-mcrypt php5-mhash php5- ncurses php5-odbc php5-openssl php5-pcntl php5-pgsql php5-posix php5- shmop php5-snmp php5-soap php5-sockets php5-sqlite php5-sysvsem php5- tokenizer php5-wddx php5-xmlrpc php5-xsl php5-zlib php5-exif php5-pear php5-sysvmsg php5-sysvshm Khởi động lại Lighttpd /etc/init.d/lighttpd restart Nạp lại trang http://192.168.0.100/info.php trên trình duyệt và kéo xuống mục modules. Bạn sẽ thấy nhiều modules ở đây, bao gồm cả module MySQL: . php5- ftp php5- gd php5- gettext php5- gmp php5- iconv php5- imap php5- ldap php5- mbstring php5- mcrypt php5- mhash php5- ncurses php5- odbc php5- openssl php5- pcntl php5- pgsql php5- posix php5- shmop php5- snmp. để cài đặt một vài modules khác của PHP5 để bạn có thể sử dụng nó cho ứng dụng của mình: $ yast2 -i php5- mysql php5- bcmath php5- bz2 php5- calendar php5- ctype php5- curl php5- dbase php5- dom php5- ftp. php5- shmop php5- snmp php5- soap php5- sockets php5- sqlite php5- sysvsem php5- tokenizer php5- wddx php5- xmlrpc php5- xsl php5- zlib php5- exif php5- pear php5- sysvmsg php5- sysvshm Khởi động lại Lighttpd