Tài liệu này mô tả một bộ cài đặt thay thế tương thích với "LAMP" stack (Linux, Apache, MySQL, và PHP), được gọi là "LEMP." LEMP stack là một nhóm các phần mềm có thể được sử dụng để phục vụ các trang web động và các ứng dụng web. Đây là một từ viết tắt mô tả một hệ điều hành Linux, với một máy chủ web Nginx. Các dữ liệu được lưu trữ trong MySQL và được xử lý bằng PHP. Trong hướng dẫn này, chúng tôi sẽ hướng dẫn làm thế nào để cài đặt một LEMP stack trên một máy chủ Centos 6. Trước khi bạn bắt đầu bạn cần làm các công việc sau: Kiểm tra hostname Mã: hostname hostname -f Cập nhập hệ thống Mã: yum update Nginx Web Server Cài đặt và cấu hình Có 2 cách để cài đặt nginx: 1.1 Cài đặt từ gói EPEL: Quá trình cài đặt như sau: 1. Cài đặt gói EPEL Mã: rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm 2. Cài đặt nginx bằng yum Mã: yum install nginx 3. Tiến hành khởi động và cho phép nginx chạy lúc khởi động hệ thống Mã: /etc/init.d/nginx start chkconfig --add nginx chkconfig nginx on 1.2 Biên dịch từ nguồn: 1.2.1. Cài đặt các gói cần thiết: Mã: yum install zlib-devel wget openssl-devel pcre pcre-devel sudo gcc make autoconf automake 1.2.2. Quá trình thực hiện như sau: Mã: cd /opt/ --> Đi tới thư mục của opt Mã: wget http://nginx.org/download/nginx-1.0.0.tar.gz --> Download về máy chủ Mã: tar -zxvf nginx-1.0.0.tar.gz --> Giải nén Mã: cd /opt/nginx-1.0.0/ --> Đi tới thư mục của nginx-1.0.0 Mã: ./configure --prefix=/opt/nginx --user=nginx --group=nginx –with-http_ssl_module → Tiến hành biên dịch Quá trình biên dịch kết thúc ta sẽ thu được một số thông số như sau: Mã: nginx path prefix: "/opt/nginx" nginx binary file: "/opt/nginx/sbin/nginx" nginx configuration prefix: "/opt/nginx/conf" nginx configuration file: "/opt/nginx/conf/nginx.conf" nginx pid file: "/opt/nginx/logs/nginx.pid" nginx error log file: "/opt/nginx/logs/error.log" nginx http access log file: "/opt/nginx/logs/access.log" nginx http client request body temporary files: "client_body_temp" nginx http proxy temporary files: "proxy_temp" nginx http fastcgi temporary files: "fastcgi_temp" Cài đặt nginx bằng 2 câu lệnh sau: Mã: make make install Tạo một người dùng hệ thống dành riêng để chạy quá trình nginx dưới bằng câu lệnh sau đây: Mã: useradd -M -r --shell /bin/sh --home-dir /opt/nginx nginx 1.2.3. Tạo một scrrip để khởi động và dừng máy chủ dễ dàng hơn Tạo tập tin /etc/rc.d/init.d/nginx với các nội dung sau đây: Mã: # 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="/opt/nginx/sbin/nginx" prog=$(basename $nginx) NGINX_CONF_FILE="/opt/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 ~~~ 1.2.4. Một số câu lệnh cuối cùng để hoàn thành cài đặt Cấp quyền cho tập tin script Mã: chmod +x /etc/rc.d/init.d/nginx Tiến hành khởi động và cho phép nginx chạy lúc khởi động hệ thống Mã: service nginx start chkconfig --add nginx chkconfig nginx on Cấu hình nginx Virtual Hosting Mở file cấu hình lên: Mã: vim /opt/nginx/conf/nginx.conf Mã: server { listen 80; server_name www.example.com example.com; access_log /opt/nginx/logs/access.log; error_log /opt/nginx/logs/error.log; location / { root /opt/nginx/html; index index.html index.htm; } } Ở đây ta cần quan tâm đến dòng server_name và dòng root. Thay thế dòng server_name với tên miền của bạn cần sử dụng, còn dòng root nơi bạn khai báo nơi để dữ liệu trang web của bạn. Theo cấu hình trên, tạo tạo ra thư mục như sau: Mã: mkdir -p /opt/nginx/html Tạo 3 thư mục chứa dữ liệu liên quan virtual host Mã: mkdir -p /opt/nginx/site-available mkdir -p /opt/nginx/site-enable mkdir -p /opt/nginx/webdata Thư mục site-available được dùng để chứa config nginx cho từng domain Thư mục site-enable được dùng để kích hoạt cho domain chạy được nginx thông qua liên kết cứng - giữa site-available, chỉ những domain liên kết cứng mới được quyền chạy Thư mục webdata được dùng chứa source của domain Thêm vào file cấu hình nginx.conf như sau: Mã: vim /opt/nginx/conf/nginx.conf Mã: http{ include mime.type; include /opt/nginx/site-enable/*.conf; server_names_hash_bucket_size 64; Khởi động lại nginx Mã: /etc/init.d/nginx restart Triển khai PHP với FastCGI Nếu ứng dụng của bạn bao gồm mã PHP bạn sẽ cần phải thực hiện những điều sau đây. Giải pháp "PHP-FastCGI" cho phép nginx có thể xử lý và phục vụ các trang có chứa mã PHP. Bắt đầu quá trình triển khai thực hiện các lệnh sau để cài đặt phụ thuộc yêu cầu: Mã: rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm yum update yum install php-cli php spawn-fcgi wget Tạo script cho quá trình xử lý php-cgi Mã: vim /usr/bin/php-fastcgi Mã: #!/bin/sh if [ `grep -c "nginx" /etc/passwd` = "1" ]; then FASTCGI_USER=nginx elif [ `grep -c "www-data" /etc/passwd` = "1" ]; then FASTCGI_USER=www-data elif [ `grep -c "http" /etc/passwd` = "1" ]; then FASTCGI_USER=http else # Set the FASTCGI_USER variable below to the user that # you want to run the php-fastcgi processes as FASTCGI_USER= fi /usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -C 6 -u $FASTCGI_USER -f /usr/bin/php-cgi Tiếp theo tạo script để khởi động và dừng xử lý quá trình php-cgi Mã: vim /etc/init.d/php-fastcgi Mã: #!/bin/sh # php-fastcgi - Use php-fastcgi to run php applications # # chkconfig: - 85 15 # description: Use php-fastcgi to run php applications # processname: php-fastcgi if [ `grep -c "nginx" /etc/passwd` = "1" ]; then OWNER=nginx elif [ `grep -c "www-data" /etc/passwd` = "1" ]; then OWNER=www-data elif [ `grep -c "http" /etc/passwd` = "1" ]; then OWNER=http else # Set the OWNER variable below to the user that # you want to run the php-fastcgi processes as OWNER= fi PATH=/sbin:/bin:/usr/sbin:/usr/bin DAEMON=/usr/bin/php-fastcgi NAME=php-fastcgi DESC=php-fastcgi test -x $DAEMON || exit 0 # Include php-fastcgi defaults if available if [ -f /etc/default/php-fastcgi ] ; then . /etc/default/php-fastcgi fi set -e case "$1" in start) echo -n "Starting $DESC: " sudo -u $OWNER $DAEMON echo "$NAME." ;; stop) echo -n "Stopping $DESC: " killall -9 php-cgi echo "$NAME." ;; restart) echo -n "Restarting $DESC: " killall -9 php-cgi sleep 1 sudo -u $OWNER $DAEMON echo "$NAME." ;; *) N=/etc/init.d/$NAME echo "Usage: $N {start|stop|restart}" >&2 exit 1 ;; esac exit 0 Các lệnh sau đây để làm cho script thực thi, bắt đầu quá trình lần đầu tiên, và đảm bảo rằng quá trình này sẽ bắt đầu sau một chu kỳ khởi động lại: Mã: chmod +x /usr/bin/php-fastcgi chmod +x /etc/init.d/php-fastcgi service php-fastcgi start chkconfig --add php-fastcgi chkconfig php-fastcgi on Chỉnh sửa file /etc/sudoers và comment dòng Defaults requiretty và đảm bảo rằng các tập lệnh init sẽ bắt đầu khởi động. Mã: Defaults requiretty Sửa đổi cấu hình trong file nginx.conf Mã: server { server_name www.example.com example.com; access_log /srv/www/example.com/logs/access.log; error_log /srv/www/example.com/logs/error.log; root /srv/www/example.com/public_html; location / { index index.html index.htm index.php; } location ~ \.php$ { include /etc/nginx/fastcgi_params; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /opt/nginx/html$fastcgi_script_name; } } Quan trọng lưu ý bảo mật: Nếu bạn đang lập kế hoạch để chạy các ứng dụng hỗ trợ tải tập tin ( ví dụ như hình ảnh), cấu hình trên có thể đặt bạn vào một nguy cơ bảo mật bằng cách cho phép thực thi mã tùy ý. Để giảm thiểu vấn đề này, bạn có thể muốn thay đổi cấu hình của bạn để bao gồm một chỉ thị try_files. Xin lưu ý rằng sửa chữa điều này đòi hỏi nginx và php-fcgi phải nằm trên cùng một máy chủ. Mã: location ~ \.php$ { try_files $uri =404; include /etc/nginx/fastcgi_params; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /opt/nginx/html$fastcgi_script_name;[/B] } Ngoài ra, bạn cũng có thể sử dụng cách sau để bảo mật tốt hơn. Ta se có đoạn mã sau đây: Mã: location ~ \.php$ { include /etc/nginx/fastcgi_params; if ($uri !~ "^/images/") { fastcgi_pass 127.0.0.1:9000; } fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /srv/www/example.com/public_html$fastcgi_script_name; } Khởi động lại nginx Mã: /etc/init.d/nginx restart MySql Cài đặt và cấu hình 1. Cài gói MySql bằng lệnh yum: Mã: yum install mysql-server php-mysql Gói php-mysql giúp kết nối php với mysql 2. Khởi động MySql lần đầu tiên và thiết lập chạy khi khởi động Mã: service mysqld start /sbin/chkconfig --levels 235 mysqld on 3. Chạy mysql_secure_installation để cấu hình bảo mật MySQL Bạn sẽ được cung cấp tùy chọn để thay đổi mật khẩu gốc, loại bỏ tài khoản người dùng ẩn danh, vô hiệu hóa đăng nhập root bên ngoài của localhost, và loại bỏ các cơ sở dữ liệu, kiểm tra và tải lại đặc quyền. Mã: mysql_secure_installation Tạo cơ sở dữ liệu MySql 1. Đăng nhập vào mysl Mã: mysql -u root -p 2. Tạo cơ sở dữ liệu và user Mã: create database example; grant all on example.* to 'example' identified by 'password'; 3. Thoát khỏi MySql Mã: quit Để đảm bảo rằng PHP sẽ có thể truy cập các kết nối MySQL của bạn chỉ cần khởi động lại dịch vụ PHP bằng cách dùng lệnh sau đây: Mã: /etc/init.d/php-fastcgi restart