Việc cấu hình một LAMP Stack (Apache, PHP, MySQL trên máy chủ Linux) là điều không có gì khó khăn và đơn giản với hầu hết người dùng. Thế mạnh của máy chủ Web chạy Apache đó là không cần phải cấu hình quá nhiều và sử dụng ngay cho hầu hết người dùng. Thế mạnh của Apache đó là hoạt động dựa trên cấu hình của tập tin .htaccess. Hầu hết các mã nguồn có kèm theo tập tin .htaccess là coi như cấu hình xong luôn cho Apache, đến tay người dùng không phải làm gì thêm.
Sau vài năm sử dụng (cả máy chủ Web Apache và Nginx) mình nhận thấy máy chủ Web Apache hoạt động dựa trên sự ổn định và cố gắng duy trì sự hoạt động này đến người dùng cuối, tuy nhiên yêu cầu tài nguyên của hệ thống nhiều hơn (CPU và RAM), còn Nginx thì đối với nội dung động (như PHP) thì kém hiệu suất hơn so với Apache một chút (mình cảm nhận dựa trên trang WordPress với khoảng 50 Plugin được kích hoạt, Apache cho tốc độ nhanh hơn thấy rõ), tuy nhiên khi có lượt truy cập đồng thời cao, thì Nginx đã phát huy thế mạnh của mình đó là tài nguyên máy chủ không hao tốn nhiều như Apache.
Hôm nay mình xin hướng dẫn các bạn cài đặt một LEMP Stack (Nginx, PHP, MySQL trên máy chủ Linux – mà cụ thể ở đây đó là Ubuntu Server 16.04).
Đầu tiên thì chúng ta cứ cập nhật các gói thông qua dòng lệnh:
apt-get update
Và:
apt-get upgrade
Bước đầu tiên đó là chúng ta cài đặt Nginx:
apt-get install nginx
Sau khi cài đặt Nginx, bạn có thể truy cập ngay http://IP-máy-chủ để kiểm tra, bạn sẽ thấy trang chủ của Nginx ngay khi bạn cài đặt thành công.
Và bây giờ chúng ta cài đặt MySQL – đây là hệ quản trị cơ sở dữ liệu mà các ứng dụng, chương trình sẽ lưu trữ thông tin ở đây.
Để cài đặt MySQL, các bạn dùng lệnh:
apt-get install mysql-server
Đợi một lát tiến trình sẽ hỏi bạn mật khẩu cho tài khoản root:
Một lần nữa tiến trình sẽ hỏi mật khẩu thêm lần nữa để khẳng định bạn đánh không nhầm:
Tiếp theo là chúng ta sẽ cài đặt PHP để chạy các ứng dụng, chương trình sử dụng mã nguồn PHP. Trong trường hợp này mình sẽ cài đặt PHP 7.0.
apt-get install php7.0-fpm
PHP7.0 sẽ hoạt động cùng với Nginx thông qua PHP-FPM (tiến trình FastCGI Process Manager).
Và lúc này tiến trình FastCGI sẽ hoạt động trên một cái gọi là Socket:
/run/php/php7.0-fpm.sock
Bây giờ chúng ta lướt qua tập tin Virtual host của Nginx xem cấu hình như thế nào để hoạt động cùng với PHP: (Các tập tin cấu hình này nằm ở thư mục /etc/nginx/sites-available/)
nano /etc/nginx/sites-available/default
Duới đây là nội dung toàn bộ tập tin này:
##
# You should look at the following URL's in order to grasp a solid understanding
# of Nginx configuration files in order to fully unleash the power of Nginx.
# http://wiki.nginx.org/Pitfalls
# http://wiki.nginx.org/QuickStart
# http://wiki.nginx.org/Configuration
#
# Generally, you will want to move this file somewhere, and start with a clean
# file but keep this around for reference. Or just disable in sites-enabled.
#
# Please see /usr/share/doc/nginx-doc/examples/ for more detailed examples.
##
# Default server configuration
#
server {
listen 80 default_server;
listen [::]:80 default_server;
# SSL configuration
#
# listen 443 ssl default_server;
# listen [::]:443 ssl default_server;
#
# Note: You should disable gzip for SSL traffic.
# See: https://bugs.debian.org/773332
#
# Read up on ssl_ciphers to ensure a secure configuration.
# See: https://bugs.debian.org/765782
#
# Self signed certs generated by the ssl-cert package
# Don't use them in a production server!
#
# include snippets/snakeoil.conf;
root /var/www/html;
# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# include snippets/fastcgi-php.conf;
#
# # With php7.0-cgi alone:
# fastcgi_pass 127.0.0.1:9000;
# # With php7.0-fpm:
# fastcgi_pass unix:/run/php/php7.0-fpm.sock;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
# Virtual Host configuration for example.com
#
# You can move that to a different file under sites-available/ and symlink that
# to sites-enabled/ to enable it.
#
#server {
# listen 80;
# listen [::]:80;
#
# server_name example.com;
#
# root /var/www/example.com;
# index index.html;
#
# location / {
# try_files $uri $uri/ =404;
# }
#}
Tuy nhiên hãy “nhảy bước” đến phần cấu hình PHP:
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# include snippets/fastcgi-php.conf;
#
# # With php7.0-cgi alone:
# fastcgi_pass 127.0.0.1:9000;
# # With php7.0-fpm:
# fastcgi_pass unix:/run/php/php7.0-fpm.sock;
#}
Dấu “#” là để nội dung đằng sau nó sẽ không hoạt động, sau khi bạn bỏ dấu “#” thì cấu hình mới có hiệu lực. Như vậy, để kích hoạt thì chúng ta sẽ lần lượt bỏ đi những dấu “#” đằng trước:
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
include snippets/fastcgi-php.conf;
#
# # With php7.0-cgi alone:
# fastcgi_pass 127.0.0.1:9000;
# With php7.0-fpm:
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}
Như vậy, với cấu hình ở trên chúng ta đã kích hoạt xong để PHP hoạt động với Nginx sử dụng tiến trình FastCGI kết nối thông qua socket unix:/run/php/php7.0-fpm.sock.
Bạn cũng có thể thay bằng kết nối TCP bằng cách cho FastCGI kết nối thông qua Port 9000:
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
include snippets/fastcgi-php.conf;
#
# With php7.0-cgi alone:
fastcgi_pass 127.0.0.1:9000;
# # With php7.0-fpm:
# fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}
Bạn đừng quên thay đổi cấu hình trong tập tin www.conf của PHP:
nano /etc/php/7.0/fpm/pool.d/www.conf
Bạn tìm đến dòng listen = /var/run/php5-fpm.sock:
Ghi chú: Bạn có thể tìm các tập tin như trong bài hướng dẫn của mình bằng lệnh: locate [tên-tập-tin]. Nếu không có locate, thì cài đặt bằng cách apt-get install locate. Sau đó nhớ dùng lệnh updatedb. Ví dụ để tìm tập tin www.conf, thì dùng lệnh:
locate www.conf
Bây giờ tiếp tục sử đổi một chút trong cấu hình PHP:
nano /etc/php/7.0/fpm/php.ini
Các bạn cấu hình dòng cgi.fix_pathinfo=0 nhé. Đây là thiết lập bảo mật thôi.
Tiếp tục là cấu hình để Nginx đọc các tập tin PHP và chuyển cho PHP biên dịch:
# Add index.php to the list if you are using PHP
index index.php index.html index.htm index.nginx-debian.html;
Thêm index.php sau index.
Bây giờ kiểm tra một chút xem sao, chúng ta sẽ tạo tập tin info.php với nội dung như sau:
<?php
phpinfo();
?>
Bây giờ bạn truy cập: http://IP-máy-chủ/info.php:
Nhưng chưa xong đâu, các bạn đừng vội mừng nhé, chúng ta cần cài đặt thư viện để PHP và MySQL hoạt động với nhau với lệnh:
apt-get install php7.0-mysql
Bạn cũng có thể cài đặt thêm các gói mở rộng cho PHP cho các ứng dụng cần thiết.
Chú ý: Đối với máy chủ Web Apache, chúng ta có cấu hình với tập tin .htaccess. Còn Nginx không có cho nên các ứng dụng sẽ có các cấu hình khác nhau.
root /var/www/html;
# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
}
Ví dụ như ở trên chúng ta thấy thư mục gốc đó chính là /var/www/html.
server_name bạn sẽ điền tên domain vào đây.
Cuối cùng là phần location, ở đây sẽ cấu hình để viết lại đường dẫn, hoặc là các thiết lập nâng cao khác, chẳng hạn như đối với WordPress thì sẽ thế này:
root /var/www/html;
# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html;
server_name vngeek.com;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ /index.php?$args;
}
Để Enable một Virtual host trong nginx, bạn cần đưa tập tin cấu hình sang thư mục /etc/nginx/sites-enabled/:
ln -s /etc/nginx/sites-available/vngeek /etc/nginx/sites-enabled/
Trong đó vngeek là tập tin Virtual host.
Bonus: Bạn có thể cài đặt thêm PHPMyAdmin để quản lý cơ sở dữ liệu dễ dàng hơn:
apt-get install phpmyadmin
Và tiếp tục symlink để chúng ta có thể truy cập trang thiết lập của PHPMyAdmin:
ln -s /usr/share/phpmyadmin /var/www/html
Bạn có thể truy cập PHPMyAdmin bằng cách truy cập địa chỉ:
http://IP-máy-chủ/phpmyadmin
Bạn cũng có thể tải về Sypex Dumper để sao lưu cơ sở dữ liệu sau này tại địa chỉ: Sypex Dumper 2.0.11 (PHP 5).
Và:
Sypex Dumper cho PHP7.0,
Sypex Dumper cho PHP7.1
Chúc các bạn thành công!