Sau khi tôi giới thiệu làm thế nào để tạo 1 Instance VPS free một năm với Amazon EC2.
Hôm nay tôi viết bài làm thế nào setup một webserver ( Nginx ) để chạy với PHP ( sử dụng PHP-FPM ) và cơ sở dữ liệu là Mysql.
Mục tiêu: Giúp các bạn hiểu sơ về web server sử dụng Nginx, PHP-FPM . Các bạn có thể setup đơn giản nhất webserver chạy bằng Nginx , PHP-FPM và Mysql
Tại sao là Nginx không phải là Apache hay là một web server khác ?
Nginx là open source, free , high performance HTTP server , chủ yếu tập trung vào vấn đề xử lý request ở cùng một thời điểm , tối ưu tài nguyên cho hệ thống như RAM, CPU .
Các bạn có thể tham khảo thêm thông tin ở link sau: Thấy tài liệu này cũng khá đủ, giải thích cũng khá chi tiết. Nếu tôi viết lại thì chắc là cũng dịch từ tài liệu bên dưới . He he. Thôi các bạn tự đọc vậy.
http://www.aosabook.org/en/nginx.html
PHP-FPM là gì ? Tại sao lại chọn nó ?
Để hiểu được PHP-FPM là gì ? Thì trước hết các bạn phải hiểu được cơ chế xử lý của web server.
Vậy làm thế nào webserver chạy được web viết bằng php, python, hay ruby …
Chẳng qua là webserver sẽ gọi những chương trình có thể hiểu được PHP, Python, ruby, xử lý những request và trả về thông tin cho
webserver từ đó trả về thông tin cho browser. Như hình bên dưới:
Vậy CGI là phương pháp giúp web server gọi những chương trình có thể hiểu được ( PHP, Ruby, Python ) để xử lý những request và trả về dữ liệu cho browser.
Mỗi lần gọi CGI Program’s để xử lý thì tạo một process để xử lý. Vậy mỗi request sinh ra 1 process để xử lý. Việc này làm tốn tài nguyên của hệ thống như CPU và RAM, nếu trong trường hợp heavy load đễ gây ra crash hệ thống.
Nên Fast CGI ra đời, với cơ chế persistent processes ( có thể hiểu là process nó luôn luôn ở chạy ở trạng thái luôn luôn chờ có một request tới để xử lý ) có thể xử lý nhiều request cùng một lúc. Chính vì điều này , tránh khỏi việc mỗi request tạo ra một process để xử lý, nên sử dụng tài nguyên hiệu quả hơn.
Như vậy các bạn đã hiểu rõ sơ về khái nhiệm GCI, Fast CGI.
Vậy PHP -FPM là gì ?
PHP-FPM (FastCGI Process Manager) là FastCGI với thêm một vài tính năng hỗ trợ khi site heavy load.
Trong danh sách tíng năng thì tính năng này được nói đầu tiên:
advanced process management with graceful stop/start;
Đơn giản nếu bạn dùng fast-cgi thuần tí, thì các bạn thay đổi config thì các bạn phải stop/start lại fast-cgi, như vậy thì site sẽ down một vài phút.
Còn với php-fpm thì các bạn có thể thay đổi config và reload lại, không làm site bị down.
Tính năng khác thêm vào các bạn có thể tham khảo ở đây:
http://www.php.net/manual/en/install.fpm.php
Vậy là các bạn hiểu được sơ sơ về các khái niệm.
Bây h vào mục chính làCài đặt Nginx + PHP-FPM + MySQL
Nếu bạn sử dụng EC2 thì trước khi cài đặt bạn chỉnh thời gian, và một số gói cần thiết :
sudo ln -sf /usr/share/zoneinfo/Asia/Saigon /etc/localtime sudo yum install pcre-devel zlib-devel openssl-devel sudo yum install gcc sudo yum install make
Install Nginx và PHP-FPM
wget http://nginx.org/download/nginx-1.4.7.tar.gz tar fx nginx-1.4.7.tar.gz cd nginx-1.4.7 ./configure --sbin-path=/usr/local/sbin --with-http_ssl_module --with-http_stub_status_module make && make install
sudo yum install -y php-fpm
Install PHP extensions
sudo yum install -y php-devel php-mysql php-pdo \ php-pear php-mbstring php-cli php-odbc \ php-imap php-gd php-xml php-soap
Install PHP-APC
sudo yum install -y php-pecl-apc
sudo yum install -y pcre-devel
Install MySQL
sudo yum -y install mysql-server mysql
Nginx Configuration
Tao user Nginx:sudo adduser --system --no-create-home --user-group -s /sbin/nologin nginxBạn tạo vhost directory. Việc này giúp bạn dễ quản lý hơn nếu sau này trên VPS các bạn có thể quản lý nhiều website khác nhau.
Thư mục sites-available là lưu tất cả các config của từng Vhost khác nhau:
Ví dụ bạn có 5 website cùng host trên một server, thì bạn có 5 file đặt trong thư mục này.
Nếu site nào bạn muốn bật lên thì chỉ việc tạo softlink vào thư mục sites-enabled mà thôi.
mkdir /usr/local/nginx/sites-available mkdir /usr/local/nginx/sites-enabledThêm dòng include thư mục sites-enabled vào config chính của nginx.
sudo vi /usr/local/nginx/conf/nginx.conf
include /usr/local/nginx/sites-enabled/*;
Ví dụ, tôi tạo một Vhost là mysite để config cho trang web mysite.com
chẳng hạn. Tạo virtual host mysite file trong thư
mục /usr/local/nginx/sites-availableTrước mắt tôi tạo những thư mục sau:
public_html: thư mục web của bạn
logs: thư mục log, thì có access log, error log.
mkdir -p /srv/www/mysite/public_html mkdir -p /srv/www/mysite/logs chown -R nginx:nginx /srv/www/mysite
sudo vi /usr/local/nginx/sites-available/mysite server { server_name mysite.com; access_log /srv/www/mysite/logs/access.log; error_log /srv/www/mysite/logs/error.log; root /srv/www/mysite/public_html; location / { index index.html index.htm index.php; } location ~ \.php$ { try_files $uri =404; # Include the standard fastcgi_params file included with nginx include fastcgi_params; fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } }Tạo soft link những Vhost nào enable. Như trong phần này tôi enable vhost mysite
ln -s /usr/local/nginx/sites-available/mysite /usr/local/nginx/sites-enabled/mysite
Tạo script restart Nginx:
sudo vi /etc/init.d/nginxCopy và Paste:
#!/bin/sh # # nginx - this script starts and stops the nginx daemin # # chkconfig: - 85 15 # description: Nginx is an HTTP(S) server, HTTP(S) reverse \ # proxy and IMAP/POP3 proxy server # processname: nginx # config: /usr/local/nginx/conf/nginx.conf # pidfile: /usr/local/nginx/logs/nginx.pid # Source function library. . /etc/rc.d/init.d/functions # Source networking configuration. . /etc/sysconfig/network # Check that networking is up. [ "$NETWORKING" = "no" ] && exit 0 nginx="/usr/local/sbin/nginx" prog=$(basename $nginx) NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf" lockfile=/var/lock/subsys/nginx start() { [ -x $nginx ] || exit 5 [ -f $NGINX_CONF_FILE ] || exit 6 echo -n $"Starting $prog: " daemon $nginx -c $NGINX_CONF_FILE retval=$? echo [ $retval -eq 0 ] && touch $lockfile return $retval } stop() { echo -n $"Stopping $prog: " killproc $prog -QUIT retval=$? echo [ $retval -eq 0 ] && rm -f $lockfile return $retval } restart() { configtest || return $? stop start } reload() { configtest || return $? echo -n $"Reloading $prog: " killproc $nginx -HUP RETVAL=$? echo } force_reload() { restart } configtest() { $nginx -t -c $NGINX_CONF_FILE } rh_status() { status $prog } rh_status_q() { rh_status >/dev/null 2>&1 } case "$1" in start) rh_status_q && exit 0 $1 ;; stop) rh_status_q || exit 0 $1 ;; restart|configtest) $1 ;; reload) rh_status_q || exit 7 $1 ;; force-reload) force_reload ;; status) rh_status ;; condrestart|try-restart) rh_status_q || exit 0 ;; *) echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}" exit 2 esac
sudo chmod +x /etc/init.d/nginx sudo /etc/init.d/nginx start
PHP-FPM Configuration
sudo vi /etc/php-fpm.d/www.conf
[...] listen = /var/run/php-fpm/php-fpm.sock listen.owner = nginx listen.group = nginx listen.mode = 0664 user = nginx group = nginx [...]
sudo vi /etc/php.ini
cgi.fix_pathinfo=0
Auto Start Nginx, PHP-FPM, and MySQL in EC2 Amazon Linuxchkconfig nginx on chkconfig mysqld on chkconfig php-fpm on
Kiểm tra cấu hình Nginx and FastCGI:
Tạo file index.php(/srv/www/mysite/public_html/index.php):
<?php phpinfo(); ?>
Vào browser và gõ địa chỉ IP và xem kết quả.
Chúc bạn thành công
Không có nhận xét nào:
Đăng nhận xét